Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 10:17 UTC

rangershi / dx

JavaScript · PythonMIT★ 0 Sterne⑂ 1 Forkseit Jan. 2026Auf GitHub ansehen ↗

rangershi/dx erreicht einen Gesundheitsindex von 44 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei Sustainability & Governance (58/100) ab, am schwächsten bei Community & Adoption (32/100). Zuletzt vor 5 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

44
gesamt / 100
Gefährdet

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.

44
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

rangerPersönliches Konto
11 Follower24 öffentliche Reposseit Jan. 2014

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
npm@ranger1/dx0.1.1272.653126vor 5 Tagen

Metriken nach Kategorie

Vitalität

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

47Gefährdet · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 5 Tagen
14.5/36Commit-Rhythmus — 21/52 Wochen mit Commits
18/18Commit-Volumen — 261 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year261
human_commit_share1
days_since_last_push5
active_weeks_last_year21
Wie die Bewertung erfolgt
0/27Liefert Releases aus — keine Releases veröffentlicht
0/36Release-Aktualität — keine Releases
0/27Release-Rhythmus — keine Releases
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

32Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 1 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks1
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
45.7/80Downloads pro Monat — 2.653 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@ranger1/dx
dependents
ecosystemsnpm
total_downloads
monthly_downloads2.653
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

58Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
2/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 91 % der Commits
4.1/13.5Breite der Beitragenden — 3 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled3
top_contributor_share0,912
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
38.2/38.3PR-Annahme — 21/21 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 1/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs21
open_issues0
closed_issues19
issue_closed_ratio1
closed_unmerged_prs0
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
7.8/25Reichweite des Inhabers — 11 Follower von rangershi
22.2/25Kontohistorie — 24 öffentliche Repos, Kontoalter ca. 12 Jahre
Verwendete Eingangsdaten
followers11
owner_typeUser
is_verified
owner_loginrangershi
public_repos24
account_age_days4.558
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 126 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@ranger1/dx
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

40Gefährdet · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 2 merged PRs checked by a CI test -- score normalized to 0
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionnein

Sicherheit

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

40Gefährdet · 16 % des Gesamtindex

Sicherheitslage

25Kritisch
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 0 out of 2 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
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 — keine Daten
0/7.5Vulnerabilities — 45 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate2,5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages2
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:@ranger1/dx@0.1.127 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 2 Paketen. Erreichbarkeit wird nicht analysiert.

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.

48Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
18/45Agentenanweisungen — AGENTS.md (Rumpf)
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 84 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,84
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes145
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — lockfile
6/10Belegte Agentenpraxis — 3 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json, pnpm-lock.yaml
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0,03
toolchain_manifests
dependency_bot_commit_share0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — JavaScript ohne Typprüfungs-Konfiguration
55/55Handhabbare Dateigrößen — 0/102 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJavaScript
largest_source_bytes35.122
source_files_sampled102
oversized_source_files0
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

0GitHub-Sterne
3Mitwirkende
261Commits, letzte 12 Monate
5Tage seit letztem Push
0Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 2.5 / 10
2.5Gesamtwert

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 2 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
0Vulnerabilities45 existing vulnerabilities detected
Direkte Abhängigkeiten 2
RegistryPaketVersionsvorgabeManifest
npmstrip-json-comments^5.0.3package.json
npmyaml^2.8.1package.json
Alle Abhängigkeiten nicht erhoben

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

Abhängigkeits-Advisories 0

Die Installation von npm:@ranger1/dx@0.1.127 zieht 2 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1141,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Shell": 6294,
        "Python": 90746,
        "JavaScript": 642671
      },
      "pushed_at": "2026-07-20T00:51:26Z",
      "created_at": "2026-01-23T13:29:28Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T00:51:29Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "Python"
      ]
    },
    "owner": {
      "blog": null,
      "name": "ranger",
      "type": "User",
      "login": "rangershi",
      "company": null,
      "location": null,
      "followers": 11,
      "avatar_url": "https://avatars.githubusercontent.com/u/6543980?v=4",
      "created_at": "2014-01-30T11:54:23Z",
      "is_verified": null,
      "public_repos": 24,
      "account_age_days": 4558
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "a9ee3fba19cc0ea6dac62727181eefe3175ff171",
          "body": "变更说明:\n- backend artifact-only 发布跳过目标工程依赖安装\n- 普通 backend、Vercel 与其他命令保留现有依赖检查\n- 增加依赖路由回归测试并升级版本至 0.1.127\n\nCloses: #40",
          "is_bot": false,
          "headline": "perf(deploy): skip dependencies for artifact release",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-19T12:46:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "886e77a34afd231cd2cc330c1d108f02c5728b30",
          "body": null,
          "is_bot": false,
          "headline": "dx 126",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-19T12:29:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c835ea2b802ec1a978f98943d5801c17f0e8f627",
          "body": null,
          "is_bot": false,
          "headline": "0.1.125",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-19T09:03:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46bae45d4b17d7ea84dd00ea622fe0941f6d5d21",
          "body": null,
          "is_bot": false,
          "headline": "\"version\": \"0.1.124\"",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-19T08:26:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdd29be11d03b6413085a1c769ae6819cde75de0",
          "body": null,
          "is_bot": false,
          "headline": "\"version\": \"0.1.124\"",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-19T08:26:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6395ba74d02cdd60797bce10372b0f68898a67c7",
          "body": null,
          "is_bot": false,
          "headline": "add fix error",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-19T05:36:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f1732f0ce7376a63a4f4e180f7fdfb0224fb90a",
          "body": null,
          "is_bot": false,
          "headline": "dx add brand",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-19T05:19:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6668fd2ccb59c26c2d4e36254f0bfd146e7b0409",
          "body": null,
          "is_bot": false,
          "headline": "Update package.json",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-11T05:45:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfd94640a0eaa9eae2341e1e4c59ed9c905bd86a",
          "body": "变更说明:\n- 防止隔离开发目录进入仓库状态\n\nRefs: #39",
          "is_bot": false,
          "headline": "chore: 忽略本地 git worktree 目录",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-11T02:54:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54d2f49fd6222e3c00b3117c3284996932e1ab43",
          "body": "变更说明:\n- 按 TDD 拆分回归测试与最小实现步骤\n- 明确门禁和完整测试验证命令\n\nRefs: #39",
          "is_bot": false,
          "headline": "docs: 添加 backend E2E 参数透传实施计划",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-11T02:54:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1343f428f8d0d6fe2bedc93700c016fe764a8a73",
          "body": "变更说明:\n- 记录 shell 行尾注释导致测试参数被截断的根因\n- 明确注释感知参数拼接与 CLI 回归测试方案\n\nRefs: #39",
          "is_bot": false,
          "headline": "docs: 设计 backend E2E 测试名称透传修复",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-11T02:18:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f41afa95667f09bfd8f019d7be4aef17783459e9",
          "body": null,
          "is_bot": false,
          "headline": "透传 可以指定 运行某一个 E2 测试",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-10T14:08:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11f91546e7f33d89cb525c74d405c257b71f03ef",
          "body": null,
          "is_bot": false,
          "headline": "增加 flag",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-09T12:47:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d4415f207811e558dc7b81b834a055a56c7eca1",
          "body": null,
          "is_bot": false,
          "headline": "优化技能",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-04T04:14:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2951ae1f77c70c0ad44d024969b965af6fa5a3f5",
          "body": null,
          "is_bot": false,
          "headline": "op handoff",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-02T15:49:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6ce3dfaf98db01d0b8bf39f7116360b43e9553c",
          "body": null,
          "is_bot": false,
          "headline": "去除自动触发",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-02T09:54:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09a79347b3063e50dcdc8eeb17bdac2e5bf2c69d",
          "body": null,
          "is_bot": false,
          "headline": "update 115",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-07-02T09:48:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1ee3b6f67da07b04ccfbcf21be50cc8fe29ff74",
          "body": null,
          "is_bot": false,
          "headline": "feat: prevent appending maxWorkers for unit tests using Jest --runInBand",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-21T04:09:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc257fad280616b0f9a9bd2932837dbc52a04b4a",
          "body": null,
          "is_bot": false,
          "headline": "feat: enhance documentation for command execution and testing parameters",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-21T03:13:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5cf4ea86f6cf61ce5b24fc6f837f8911d4b9f85",
          "body": null,
          "is_bot": false,
          "headline": "feat: set default test workers to 8 for unit and e2e commands",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-21T03:05:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f500a8c383e27d5209f2b084f2d20ab07a879160",
          "body": "…nsion",
          "is_bot": false,
          "headline": "feat: update version to 0.1.112 and add enum-single-source audit dime…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-20T06:19:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9701082c23ab4ce587595c64429197c3bc28db9d",
          "body": "* fix: support multiple unit test paths\n\n变更说明:\n- 放开 test unit 的位置参数上限,保持 e2e 路径必填与非 unit 上限不变。\n- 收集 unit target 后的多个测试路径,按底层 runner 逐个归一化并透传。\n- 增加 unit 多路径参数解析和 Nx/Vitest 路径透传回归测试。\n\nRefs: shitgood-bradford54/ai-monorepo#6424\n\n* chore: sync pnpm lockfile\n\nRemove a stale self-dependency entry that no \n[…]\nage 保持支持多路径\n- 非 unit test usage 继续限制最多三个 positional\n- 增加 e2e usage 额外路径占位符的回归测试\n\nRefs: shitgood-bradford54/ai-monorepo#6424\n\n---------\n\nCo-authored-by: bradford54 <bradford54@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: support multiple unit test paths (#38)",
          "author_name": "bradford54",
          "author_login": "bradford54",
          "committed_at": "2026-06-20T05:24:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce84f10fedc6307b0e3a881fe0cf14e38bcfb494",
          "body": "…ured commands",
          "is_bot": false,
          "headline": "feat: implement dynamic command registration and execution for config…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-18T00:45:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5da723f0356eecc9cbe61250086c8d8c622d3507",
          "body": "… in deployment",
          "is_bot": false,
          "headline": "feat: update version to 0.1.110 and enhance environment flag handling…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-12T10:15:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61d856485a128271edef9fbb1bbf5421a6d33b1a",
          "body": null,
          "is_bot": false,
          "headline": "feat: implement health check URL support using runtime environment PORT",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-12T09:43:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af73c11c7fea81d3a49dee0837347b8b0f0aeb43",
          "body": "…nd deployment",
          "is_bot": false,
          "headline": "feat: add environment-specific remote configuration support for backe…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-12T07:43:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8666f30b58978ad53677a3e05cba77f219fc6754",
          "body": "…ect target resolution",
          "is_bot": false,
          "headline": "feat: enhance e2e command handling with passthrough arguments and dir…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-11T09:50:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "188df1bffb2ace78565b34c01cc6943189158414",
          "body": null,
          "is_bot": false,
          "headline": "chore: update version to 0.1.106 and modify skill description",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:23:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24a011da9d90226a912856da8639d497abbec66e",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'feat/36-purge-deleted-skills'",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:21:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bce9d0e0e17e750be950a6b90cde85c1b9d91bb",
          "body": "* feat: dx initial 清理历史已删除的 skill\n\n变更说明:\n- 硬编码 DELETED_SKILLS 名单(来自 git 历史中曾托管、现已从 skills/ 删除的 skill)\n- 新增 purgeSkills(dir, names):无条件彻底清理软链或真实目录\n- runCodexInitial 在 agents/claude/codex 三处对已删除名单执行 purge,并输出清理统计\n- 补充测试:验证三处的真实副本与软链均被清理,现存 skill 不受影响\n\nRefs: #36\n\n* fix: 修复审查问题 #C1 — 移除对已删除 superpowers \n[…]\n:\n- 将旧 managed skill 测试中的 packaged autospec 替换为 skill-c,避免与 DELETED_SKILLS 护栏冲突\n- 保留用例原语义:验证现存包内 skill 的 codex 旧副本清理与 claude 软链重建\n\nRefs: #36\n\n---------\n\nCo-authored-by: Your Name <mays87510@gmail.com>",
          "is_bot": false,
          "headline": "feat: dx initial 清理历史已删除的 skill (#37)",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-06-07T02:19:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c740a055f5dfe4de11fe6d43ca02430dc54579b3",
          "body": "变更说明:\n- 将旧 managed skill 测试中的 packaged autospec 替换为 skill-c,避免与 DELETED_SKILLS 护栏冲突\n- 保留用例原语义:验证现存包内 skill 的 codex 旧副本清理与 claude 软链重建\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复验证失败 #V1 — 更新现存 skill 测试数据",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:16:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27e38fdb1791a31b30b69c251270cb1c460b2ac1",
          "body": "变更说明:\n- 抽出 lstatIfExists 统一处理 ENOENT 与非 ENOENT 错误\n- removeManagedNonSymlinkSkills 与 purgeSkills 共用该探测逻辑,减少重复分支且保持原有清理语义\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复审查问题 #m2 — 复用路径存在性探测",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:15:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80799295eb8c80cbdeecdeb231ad952520b543fb",
          "body": "变更说明:\n- assertDirExists 遇到存在但不是目录时直接抛出“不是目录”错误\n- 避免把非目录场景包装成“不存在或不可访问”,提升排障信息准确性\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复审查问题 #m4 — 保留非目录错误语义",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:14:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c90547632f97383f2c7fb4cac16be67fab2843ee",
          "body": "变更说明:\n- 在 DELETED_SKILLS 注释中补充 --name-only、sed 提取一级目录名和 sort -u 步骤\n- 明确名单来源是历史一级 skill 目录减去当前现存 skill 名单\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复审查问题 #m3 — 补全历史 skill 名单提取命令",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:14:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "717d93bcc04d065430d17fdea89ecec0ded8c397",
          "body": "变更说明:\n- 增加指向 agents 之外目录的 omc-reference 软链残留场景\n- 断言 purge 删除 claude 软链本身且不影响外部 target,避免测试依赖 agents target 被删除的巧合\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复审查问题 #M3 — 独立验证 claude 软链清理",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:14:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fca195d2e39f1ea8baeef3b1d03bea284a49e9a",
          "body": "变更说明:\n- 在 dx initial 同步前校验 DELETED_SKILLS 不得与当前包内 skills 重叠,避免刚同步的 skill 被 purge 清掉\n- 增加重叠场景回归测试,确保名单维护错误会快速失败\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复审查问题 #m1 — 增加已删除 skill 名单护栏",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:14:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "298e441b1f9889c623be89d81249d22e9eb43d1c",
          "body": "- lstat/rm 遇到非 ENOENT 错误(如权限)时改为 logger.warn 记录并继续,不再 throw\n- 返回值新增 failed 计数,汇总日志在有失败时输出告警\n- 避免单个陈旧副本的清理异常拖垮整个 skill 同步\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复审查问题 #M2 — purgeSkills 改为尽力清理不阻断主流程",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T02:00:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e783431e25e696f677527b8bd89d31a693ea982f",
          "body": "- 将 claude 软链目录的 purge 提到 agents/codex 真实副本之前\n- 避免中途失败时残留指向已删除 agents target 的悬空软链\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复审查问题 #M1 — 调整 purge 顺序先清软链宿主",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T01:49:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbcda1b381494bbc4a307ea764bb63928522559a",
          "body": "- commit c6fd8a7 有意删除了 docs/superpowers/specs 与 plans 下的设计文档,\n  但 backend-artifact-deploy-doc-config 测试仍读取这些文件导致 ENOENT 失败\n- 移除对 designSpec/plan 文件的读取与断言,保留仍存在的 README/example README 断言\n\nRefs: #36",
          "is_bot": false,
          "headline": "fix: 修复审查问题 #C1 — 移除对已删除 superpowers 文档的测试断言",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T01:49:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c9557f81fa29d3527600ef3a5e72b9e8ccf72d7",
          "body": "变更说明:\n- 硬编码 DELETED_SKILLS 名单(来自 git 历史中曾托管、现已从 skills/ 删除的 skill)\n- 新增 purgeSkills(dir, names):无条件彻底清理软链或真实目录\n- runCodexInitial 在 agents/claude/codex 三处对已删除名单执行 purge,并输出清理统计\n- 补充测试:验证三处的真实副本与软链均被清理,现存 skill 不受影响\n\nRefs: #36",
          "is_bot": false,
          "headline": "feat: dx initial 清理历史已删除的 skill",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-07T01:44:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb58b40c3d053e010e2ebc786ae1c2191f34407a",
          "body": "…ent guidelines",
          "is_bot": false,
          "headline": "docs: enhance SKILL.md with detailed review process and issue managem…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-06T14:33:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ea980ebe6d4d7e540e94a221b122478e8150c56",
          "body": "…mensions",
          "is_bot": false,
          "headline": "feat: add backend audit fixer documentation for various compliance di…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-06-06T14:30:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6fd8a78bae5e069338e4ccfd43d928a3644c4e7",
          "body": null,
          "is_bot": false,
          "headline": "chore: update .gitignore to exclude .omx and .idea directories",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-19T07:28:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49f540e11c9d2e257e7d1e68e87a0f51d065c316",
          "body": "…umentation",
          "is_bot": false,
          "headline": "chore: update version to 0.1.105 in package.json and add SKILL.md doc…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-19T07:26:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35aabb0b7aab0099d21cb64926a1c31abf7882d1",
          "body": null,
          "is_bot": false,
          "headline": "chore: update version to 0.1.104 in package.json",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-10T03:54:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d551b6e8b4d047cb508dd97ca81dbedf3bba972",
          "body": null,
          "is_bot": false,
          "headline": "chore: update version to 0.1.101 in package.json",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-09T10:12:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68ea8ef2eb03510c69449d4d02a8898b58920935",
          "body": null,
          "is_bot": false,
          "headline": "fix: ignore tool worktrees in nx graph",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-09T10:12:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b47bbf127bd0adaf3ea5f52473014fab6695c185",
          "body": null,
          "is_bot": false,
          "headline": "chore: update version to 0.1.101 in package.json",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-09T10:08:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5619986d3a18af9e6a52f903bf13e0d40daec511",
          "body": null,
          "is_bot": false,
          "headline": "fix: forward verbose flag to nx",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-09T10:06:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df9b539980f72e03c25fd65f7b6515ea822b05cd",
          "body": null,
          "is_bot": false,
          "headline": "chore: update version to 0.1.101 in package.json",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-09T09:53:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "448e0c430666444b2b434e84acb52ff2a9cbe66e",
          "body": null,
          "is_bot": false,
          "headline": "fix: ignore tool metadata env files",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-09T09:37:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "234831abf9a152cae3c218d6945f635a2bfb17bf",
          "body": null,
          "is_bot": false,
          "headline": "chore: update version to 0.1.100 in package.json",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-05-07T11:40:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be12121f222db48fc72d638a1a954a46edf39411",
          "body": "* chore: sync skill templates and initial copy behavior\n\n变更说明:\n- 将 doctor、git-release、multi-pr-feature-delivery 调整为显式调用,清理 doctor 旧固定脚本。\n- 调整 dx initial 对包内 skill 目录的同步逻辑,避免用户目录残留已删除文件。\n- 补充 initial 同步测试和 example 后端制品部署文档。\n\nRefs: #34\n\n* fix: 清理废弃 autospec skill\n\n- 将 autospec 加入 dx initial 的废弃 skill \n[…]\nnitial 目录替换与文档\n\n- 使用备份目录替换官方同名 skill,失败时恢复旧目录\n- 清理上次中断遗留的临时和备份目录\n- 补充 stale temp 清理与替换失败恢复测试\n- 删除 README 中已不存在的 pr-review-loop 章节\n\nRefs: #34\n\n---------\n\nCo-authored-by: Your Name <mays87510@gmail.com>",
          "is_bot": false,
          "headline": "chore: sync skill templates and initial copy behavior (#35)",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-05-07T11:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6393de4335b4c34b168de9957a252dc84b7655e",
          "body": "… documentation",
          "is_bot": false,
          "headline": "feat: update version to 0.1.99 and add SKILL.md for autospec pipeline…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-17T08:38:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a85d66bd47dc944b53a447dd6487010182a0d4f",
          "body": null,
          "is_bot": false,
          "headline": "chore: update version to 0.1.98",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-11T09:48:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2be44ac1ff30ea803fd55eeda9f434b13ba0d28d",
          "body": "… and implement tests",
          "is_bot": false,
          "headline": "feat: add check for @prisma/client installation in ensurePrismaClient…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-11T09:48:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff0cc54c600628ac2d18b881b236178df974a033",
          "body": "用户运行 dx help 后不知道可以用 dx help <命令> 查看详细用法,\n在输出末尾加一行引导文字。\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: 全局 help 末尾添加子命令帮助引导提示",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-03T07:57:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1e9bfdaa8af64a8360e5effd6eff206e638e43db",
          "body": "…nfig and help generation",
          "is_bot": false,
          "headline": "docs: update architecture and development documentation for strict co…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T15:32:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7dee57092a6ff8131f65c3c2ba64b25ccfe2b9a",
          "body": null,
          "is_bot": false,
          "headline": "chore: update version to 0.1.97 and add new entries to .gitignore",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T15:24:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22872d7496770c886690197fe9c7145f5c0a32b5",
          "body": "refactor: enforce strict dx config and dynamic help",
          "is_bot": false,
          "headline": "Merge pull request #33 from rangershi/codex/32-strict-dx-config-help",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-04-02T15:15:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c5ed322462dc3ad0922c934ddb36a8bc899d079",
          "body": "变更说明:\n- 移除旧的 CLI 与配置兼容层,统一只认 strict 新规范的环境键、命令入口和帮助输出\n- 将 help 切换为配置驱动的 schema/model/renderer 流程,并在运行时增加严格校验\n- 重写 demo/example 文档与配置示例,同时迁移 ai-monorepo 的 dx 配置到最新规范\n\nRefs: #32",
          "is_bot": false,
          "headline": "refactor: enforce strict dx config and dynamic help",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T15:12:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6eca67ebfc34200c36f6c5ac3708c5a0923f0bd5",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'codex/29-support-unit-test-filters'",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T08:09:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d77f4fabd7c9ace66884072be48a6f6022bfb6c8",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.1.96",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T08:06:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59ac6c1c3e10128c85a8414a12164a2678c8a4be",
          "body": "fix: normalize e2e file filters for nx targets",
          "is_bot": false,
          "headline": "Merge pull request #31 from rangershi/codex/29-support-unit-test-filters",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-04-02T08:02:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d45f7157f26222bb43f4b4768c2035ea6a7b11de",
          "body": "变更说明:\n- 为 dx test e2e 增加 --name 别名的回归测试,锁定用例名透传行为\n- 修正 nx test:e2e target 的文件路径归一化,在未显式声明 cwd 时优先回退到项目 e2e 目录\n- 保持 quantify 这类非 nx fileCommand 的现有行为不变\n\nRefs: #29",
          "is_bot": false,
          "headline": "fix: normalize e2e file filters for nx targets",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T07:56:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35dee526b7a411ddb2d89c3a476af45c2289a164",
          "body": "fix: support unit test file and case filters in dx",
          "is_bot": false,
          "headline": "Merge pull request #30 from rangershi/codex/29-support-unit-test-filters",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-04-02T07:50:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d62210d447dd3f5c0ed5cca4c035e0ceabec0575",
          "body": "变更说明:\n- 为 dx test unit 增加 --name / --test-name-pattern 别名,并统一映射到 -t\n- 修正 nx test 项目的单测文件路径转发,按项目执行目录改写为相对路径\n- 扩展帮助文档和 CLI 回归测试,覆盖 Jest/Vitest 与 Nx target 场景\n\nRefs: #29",
          "is_bot": false,
          "headline": "fix: support unit test file and case filters in dx",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T07:45:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8287d1fbc157a8c19570177eac9a85789d4f32e7",
          "body": "…nning options",
          "is_bot": false,
          "headline": "feat: enhance error handling audit script with flexible directory sca…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T04:52:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a45899db61186cba19c4fd0f4f61bc5e5369ea0c",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.1.94",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T03:11:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc7e57d6cf0696308e1e453da33d896dc4543143",
          "body": "…eature-checks\n\nrefactor: stop doctor from managing codex feature toggles",
          "is_bot": false,
          "headline": "Merge pull request #28 from rangershi/codex/fix/remove-doctor-codex-f…",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-04-02T03:10:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ede3f899e684d802d0aef3fc4bfc4de892e30cd",
          "body": "The doctor skill should focus on repairing executable tooling and bootstrap\nsteps, not on reading or mutating Codex feature flags. This removes the\nremaining `multi_agent` checks from the skill docs and shell workflow while\nkeeping `dx` installation and `dx initial` intact.\n\nConstraint: Doctor must \n[…]\natures|features enable|features list|experimental true|codex 命令不存在\" skills/doctor -S\nTested: bash -n skills/doctor/scripts/doctor.sh\nNot-tested: End-to-end execution of doctor.sh on a live workstation",
          "is_bot": false,
          "headline": "Stop doctor from managing Codex feature toggles",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T03:07:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dbb93b2def033306aa4ef2abd8af4735d0182be1",
          "body": null,
          "is_bot": false,
          "headline": "feat: remove deprecated skill directories during initialization",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-02T02:55:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6384970340ee433f794ab9d63a13888735afaddf",
          "body": "…e files",
          "is_bot": false,
          "headline": "chore: update .gitignore to exclude additional configuration and stat…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-01T16:26:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3707638ec7449354159c6ec2c94e110f46e9d2a8",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.1.92",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-01T16:25:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "594b1f23c2215a67c139cd53ddf2cd8b3569e7e0",
          "body": "…-skill-names\n\nrefactor: clean up doctor behavior and skill naming",
          "is_bot": false,
          "headline": "Merge pull request #27 from rangershi/codex/fix/26-cleanup-doctor-and…",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-04-01T16:19:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b74da7c8107bcd739767e8110e29e5c144dfd368",
          "body": "This change removes the remaining `~/.codex/config.toml` checks and writes\nfrom the doctor skill, while also folding in the current skill renames and\ncleanup changes already present in the working tree so the skills catalog\nlands in one coherent update.\n\nConstraint: Doctor must no longer read or rew\n[…]\nnts\\.orchestrator|agents\\.reviewer|agents\\.spark\" skills/doctor -S\nTested: bash -n skills/doctor/scripts/doctor.sh\nNot-tested: End-to-end execution of doctor.sh against a live workstation\nRelated: #26",
          "is_bot": false,
          "headline": "Stop doctor from mutating local codex config during skill maintenance",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-01T16:16:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "583ddfa5d324037c535e898729158ec44b066e7c",
          "body": "refactor: align packaged skills with repo layout",
          "is_bot": false,
          "headline": "Merge pull request #25 from rangershi/codex/fix/24-migrate-skills-layout",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-04-01T15:52:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f818a4947711bc39caae03b19abaf36ecd42f566",
          "body": "The repository now treats root-level `skills/` as the source of truth, so\nthis change moves tracked skill assets out of the old `codex/` layout,\nadds the newly introduced skill content, and rewrites `dx initial` to do\nonly one job: merge the packaged skills into `~/.codex/skills` and\n`~/.claude/skil\n[…]\nand `dx initial` in the same change\nTested: pnpm test\nTested: npm pack --dry-run\nNot-tested: Running globally installed `dx initial` against a real home directory outside the test harness\nRelated: #24",
          "is_bot": false,
          "headline": "Align skills packaging with the repo's new bootstrap layout",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-04-01T15:46:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0b5d06cfde0bb5db353dbc7a58fdd9758425d58",
          "body": null,
          "is_bot": false,
          "headline": "feat: enhance unit test command handling and add path normalization",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-29T15:00:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a3cb2fffaabd3f8aebd078465d04ec8afb7a30d",
          "body": "…ompts",
          "is_bot": false,
          "headline": "feat: update review output format and validation rules in reviewer pr…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-19T06:08:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "200d417c037788df35d4b54eca34cdd2614e1d11",
          "body": null,
          "is_bot": false,
          "headline": "feat: add service URLs to commands and implement URL printing in stack",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-19T03:33:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcfee509570c90a3b16121b463ad2d1908092319",
          "body": null,
          "is_bot": false,
          "headline": "fix: prismaSeed: true 问题",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-17T15:42:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0c8ee1af085df3817b73f8676bef7528a074c87",
          "body": "Add configurable prisma db seed step that runs after migration\nand before symlink switch during remote deployment. Controlled\nvia `prismaSeed` config in commands.json (default: false).\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add prisma-seed phase to backend deploy pipeline",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-17T15:41:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a85d6d6394e7cd5557975e7213399198f71ed3af",
          "body": "Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add design spec for deploy backend prisma seed phase",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-17T15:30:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1dfb35791a44c47620bef010d3a279ca82b747fa",
          "body": "…tignore",
          "is_bot": false,
          "headline": "chore: update stagewise version in commands.json and add .omc/ to .gi…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-17T15:20:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1594508c70715831e5f6c2415d320c4691397d0",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.1.87",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-16T09:50:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f519b51cc53a8d38d0202b3ecdcafa04a0f22859",
          "body": "…targets\n\nfeat: add config-driven guarded e2e target execution",
          "is_bot": false,
          "headline": "Merge pull request #23 from rangershi/codex/configurable-backend-e2e-…",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-03-16T09:47:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55fdba9b137cac220f84a834ecc31d2d2ebd9198",
          "body": "变更说明:\n- 在 dx test 命令中增加 requiresPath/fileCommand 驱动的 E2E target 约束与执行路径。\n- 禁止对受保护 target 使用无路径执行与 `all` 全量调用。\n- 更新主配置、示例配置、帮助文档与测试覆盖,补充新增 `test/test-command-e2e-targets.test.js`。\n\nRefs: #22",
          "is_bot": false,
          "headline": "feat: add config-driven guarded e2e target execution",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-16T09:43:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ae6679febb996fa6c5dd98ddbd9c0e3b4da47ae",
          "body": null,
          "is_bot": false,
          "headline": "docs: refine e2e target design and add plan",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-16T09:07:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9fe14331252cc2292aa188fdfd6e57eee9b5122",
          "body": null,
          "is_bot": false,
          "headline": "docs: add configurable backend e2e targets design",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-16T08:52:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5654d337b46edf12f72ecdca3ea542b6dc1c14d3",
          "body": "…re preserved",
          "is_bot": false,
          "headline": "feat: add required codex configuration and ensure existing settings a…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-14T15:17:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ee442d0a5f9354b645ca851448d7b38bb649111",
          "body": null,
          "is_bot": false,
          "headline": "fix: 添加 一些skill 去掉运行时就一些警告噪音",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-14T15:01:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abd70cb643454efffdd2cd6a5021fa511c87f719",
          "body": "…o README",
          "is_bot": false,
          "headline": "feat: add health check configuration and deployment success summary t…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-13T15:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb21eafa76154ecff32d3680c9b16556631dfeab",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'codex/fix/20-backend-artifact-deploy'",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-13T10:48:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cc14bd65c10e394b6f77c83312cd169b9dcc2c2",
          "body": "…ry and health check configuration",
          "is_bot": false,
          "headline": "feat: enhance backend artifact deployment with detailed success summa…",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-13T10:46:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a2c210610be1128e29697075fa9b4193f497136",
          "body": null,
          "is_bot": false,
          "headline": "feat: add health check verification to backend artifact deployment",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-13T10:28:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d8f26057f32b31c2c2711e1b73ff276c7c93a15",
          "body": null,
          "is_bot": false,
          "headline": "fix: bump version to 0.1.83",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-13T01:09:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80edb22cf38d84cd087ea876dd36ae6ef694e72a",
          "body": "…eploy\n\nfix: 修复后端制品部署的校验与依赖处理",
          "is_bot": false,
          "headline": "Merge pull request #21 from rangershi/codex/fix/20-backend-artifact-d…",
          "author_name": "ranger",
          "author_login": "rangershi",
          "committed_at": "2026-03-13T01:07:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7075d4d569fb9f552e44467a5a534b1d2b3253f",
          "body": "变更说明:\n- 为制品打包 tar 增加稳定环境变量,并改为使用归档文件名生成 checksum\n- 修正远端 bundle 解压与 checksum 校验逻辑,避免路径不一致导致部署失败\n- 在远端部署返回失败结果时直接抛出阶段化异常\n- 从应用和根包依赖中补齐运行时所需依赖,并补充相关测试覆盖\n\nRefs: #20",
          "is_bot": false,
          "headline": "fix: 修复后端制品部署的校验与依赖处理",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-12T16:57:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad6efd55eb0c40571bba0fddb2169398850020c9",
          "body": null,
          "is_bot": false,
          "headline": "feat: remove some",
          "author_name": "Your Name",
          "author_login": "vercel87510",
          "committed_at": "2026-03-12T16:14:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 0,
      "commits_last_year": 261,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 21,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@ranger1/dx",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@ranger1/dx",
          "is_deprecated": false,
          "latest_version": "0.1.127",
          "repository_url": "https://github.com/rangershi/dx",
          "versions_count": 126,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2653,
          "first_published_at": "2026-01-23T14:09:16.920000Z",
          "latest_published_at": "2026-07-19T12:48:00.709000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-06-18",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "example"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 35122,
      "source_files_sampled": 102,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 145
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 2,
        "malicious_count": 0,
        "assessed_package": "npm:@ranger1/dx@0.1.127",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "strip-json-comments",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.0.3"
        },
        {
          "name": "yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 21,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 19,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "vercel87510",
          "commits": 238,
          "avatar_url": "https://avatars.githubusercontent.com/u/241711888?v=4"
        },
        {
          "type": "User",
          "login": "rangershi",
          "commits": 22,
          "avatar_url": "https://avatars.githubusercontent.com/u/6543980?v=4"
        },
        {
          "type": "User",
          "login": "bradford54",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/188642786?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.912
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json",
        "pnpm-lock.yaml"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 1/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "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": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "45 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a9ee3fba19cc0ea6dac62727181eefe3175ff171",
        "ran_at": "2026-07-25T10:17:34Z",
        "aggregate_score": 2.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-06-20T05:24:51Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/rangershi/dx",
    "host": "github.com",
    "name": "dx",
    "owner": "rangershi"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 44,
      "inputs": {
        "security": 40,
        "vitality": 47,
        "community": 32,
        "governance": 58,
        "engineering": 40
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 47,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "commits_last_year": 261,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 21
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "21/52 weeks with commits",
                "points": 14.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "261 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 261
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "critical",
            "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": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 5,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 5 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 1,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "packages": [
                "@ranger1/dx"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2653
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,653 downloads/month across npm",
                "points": 45.7,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2653,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 58,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.912
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 91% of commits",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 91
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "merged_prs": 21,
              "open_issues": 0,
              "closed_issues": 19,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "21/21 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 21,
                      "decided": 21
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "followers": 11,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "rangershi",
              "public_repos": 24,
              "account_age_days": 4558
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "11 followers of rangershi",
                "points": 7.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 11,
                      "login": "rangershi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "24 public repos, account ~12 yr old",
                "points": 22.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 24
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@ranger1/dx"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "126 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 126
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 40,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "at_risk",
        "name": "Security",
        "value": 40,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "45 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@ranger1/dx@0.1.127 runtime dependency closure — what installing the published package pulls in — 2 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@ranger1/dx@0.1.127",
                  "assessed": 2
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 2,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 2,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "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": 48,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "moderate",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.84,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 145
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md (stub)",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  },
                  {
                    "code": "agent_instructions_stub",
                    "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": "84 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 84,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 42,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json",
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.03,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "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": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "3 of the last 100 commits agent-authored or agent-credited",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 3,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 35122,
              "source_files_sampled": 102,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/102 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 102,
                      "oversized": 0
                    }
                  }
                ],
                "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T10:17:40.564498Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/rangershi/dx.svg",
  "full_name": "rangershi/dx",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.