Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-24 16:06 UTC

dial9-rs / dial9

Tokio Telemetry you can run in production

Rust · TypeScript · JavaScriptApache-2.0★ 418 Sterne⑂ 38 Forksseit Feb. 2026Auf GitHub ansehen ↗

dial9-rs/dial9 erreicht einen Gesundheitsindex von 69 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (83/100) ab, am schwächsten bei Security (60/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

69
gesamt / 100
Mittel

Software-Gesundheitsindex

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

69
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

dial9-rsOrganisation
3 Follower2 öffentliche Reposseit Feb. 2026

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
crates.iodial90.3.131549vor 0 Tagentelemetryprofilingtokiotracingasynchronous
crates.iodial9-core0.5.0-rc0111vor 0 Tagen
crates.iodial9-macro0.3.756.7909vor 0 Tagen
crates.iodial9-utils0.5.0-rc061vor 0 Tagen
crates.iodial9-viewer0.3.1349317vor 0 Tagen
crates.iodial9-perf-self-profile0.4.331.94415vor 0 Tagen
crates.iodial9-trace-format0.4.161.41811vor 0 Tagen
crates.iodial9-tokio-telemetry0.3.1561.37521vor 0 Tagentelemetryprofilingtokiotracingsymposiumasynchronous

Metriken nach Kategorie

Vitalität

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

83Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
15.2/36Commit-Rhythmus — 22/52 Wochen mit Commits
18/18Commit-Volumen — 407 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year407
human_commit_share0,99
days_since_last_push0
active_weeks_last_year22
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 85 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 0,4 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count85
latest_release_tagdial9-v0.5.0-rc1
releases_from_tagsnein
days_since_latest_release0
mean_days_between_releases0,4

Community & Verbreitung

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

70Gut · 18 % des Gesamtindex
Wie die Bewertung erfolgt
42.5/60Stars — 418 Stars
13.1/25Forks — 38 Forks
1.7/15Watcher — 3 Watcher
Verwendete Eingangsdaten
forks38
stars418
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
71/80Downloads pro Monat — 212.191 Downloads/Monat über crates
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesdial9, dial9-core, dial9-macro, dial9-utils, dial9-viewer, dial9-perf-self-profile, dial9-trace-format, dial9-tokio-telemetry
dependents
ecosystemscrates
total_downloads683.959
monthly_downloads212.191
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?

62Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
9.3/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 59 % der Commits
13.5/13.5Breite der Beitragenden — 27 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 15 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled27
top_contributor_share0,587
Wie die Bewertung erfolgt
28/46.8Issue-Lösungsquote — 60 % der Issues geschlossen
34.4/38.3PR-Annahme — 414/460 entschiedene PRs gemergt
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Verwendete Eingangsdaten
merged_prs414
open_issues97
closed_issues145
issue_closed_ratio0,599
closed_unmerged_prs46
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
4.3/25Reichweite des Inhabers — 3 Follower von dial9-rs
4.3/25Kontohistorie — 2 öffentliche Repos, Kontoalter ca. 0 Jahre
Verwendete Eingangsdaten
followers3
owner_typeOrganization
is_verified
owner_logindial9-rs
public_repos2
account_age_days153

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 8 Paket(e) auf crates
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
20/20Versionshistorie — 21 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesdial9, dial9-core, dial9-macro, dial9-utils, dial9-viewer, dial9-perf-self-profile, dial9-trace-format, dial9-tokio-telemetry
ecosystemscrates
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

67Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 7 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
0/10Wiki
Verwendete Eingangsdaten
topics
has_wikinein
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

60Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
2.5/2.5Contributors — project has 15 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
4.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0.8/7.5Vulnerabilities — 9 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection, packaging. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

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

75Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 98 von 99 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,99
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes8.011
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — Cargo.toml, dial9-core/Cargo.toml, dial9-macro/Cargo.toml (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — dial9-viewer/ui/tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
6/10Belegte Agentenpraxis — 3 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
9/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesCargo.lock, package-lock.json
has_dockerfileja
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configsdial9-viewer/ui/tsconfig.json
agent_commit_share0,03
toolchain_manifestsCargo.toml, dial9-core/Cargo.toml, dial9-macro/Cargo.toml, dial9-tokio-telemetry/Cargo.toml, dial9-trace-format-derive/Cargo.toml, dial9-trace-format/Cargo.toml, dial9-trace-format/fuzz/Cargo.toml, dial9-utils/Cargo.toml, dial9-viewer/Cargo.toml, dial9/Cargo.toml, examples/memory-local/Cargo.toml, examples/metrics-service/Cargo.toml, examples/simple-local/Cargo.toml, perf-self-profile/Cargo.toml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Rust (statisch typisiert)
53.9/55Handhabbare Dateigrößen — 14/685 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRust
largest_source_bytes286.549
source_files_sampled685
oversized_source_files14
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

418GitHub-Sterne
27Mitwirkende
407Commits, letzte 12 Monate
0Tage seit letztem Push
85Releases
1Bus-Faktor
97offene Issues
crates.ioPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 38 ⇿
0Sterne
38Forks
72Releases

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

01325383742026-032026-052026-07
Major 0Minor 0Patch 0
OpenSSF Scorecard 6.0 / 10
6.0Gesamtwert

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-24 16:05 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-Protectioninternal error: error during branchesHandler.setup: internal error: githubv4.Query: non-200 OK status code: 504 Gateway Timeout body: "{\"message\": \"We couldn't respond to your request in time. Sorry about that. Please try resubmitting your request and contact us if the problem persists.\"}\r\n"
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
10Contributorsproject has 15 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
9Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 9
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
1Vulnerabilities9 existing vulnerabilities detected
Direkte Abhängigkeiten 110
RegistryPaketVersionsvorgabeManifest
crates.iobon3dial9-core/Cargo.toml
crates.iobytes1dial9-core/Cargo.toml
crates.iocrossbeam-queue0.3dial9-core/Cargo.toml
crates.ioulid1dial9-core/Cargo.toml
crates.iodial9-trace-formatdial9-core/Cargo.toml
crates.iolibcdial9-core/Cargo.toml
crates.iotokio1dial9-core/Cargo.toml
crates.iotokio-util0.7dial9-core/Cargo.toml
crates.iofutures-util0.3dial9-core/Cargo.toml
crates.ioflate21dial9-core/Cargo.toml
crates.iometrique0.1.23dial9-core/Cargo.toml
crates.iometrique-timesource0.1dial9-core/Cargo.toml
crates.ioshuttle0.9.1dial9-core/Cargo.toml
crates.iotracing0.1.44dial9-core/Cargo.toml
crates.iosyn2dial9-macro/Cargo.toml
crates.ioquote1dial9-macro/Cargo.toml
crates.ioproc-macro21dial9-macro/Cargo.toml
crates.iotokio1.52.0dial9-tokio-telemetry/Cargo.toml
crates.iotokio-util0.7dial9-tokio-telemetry/Cargo.toml
crates.ioarc-swap1dial9-tokio-telemetry/Cargo.toml
crates.iolibcdial9-tokio-telemetry/Cargo.toml
crates.iofutures-util0.3dial9-tokio-telemetry/Cargo.toml
crates.iopin-project-lite0.2dial9-tokio-telemetry/Cargo.toml
crates.ioserde1dial9-tokio-telemetry/Cargo.toml
crates.ioserde_json1dial9-tokio-telemetry/Cargo.toml
crates.iosmallvec1dial9-tokio-telemetry/Cargo.toml
crates.iobytes1dial9-tokio-telemetry/Cargo.toml
crates.iodial9-perf-self-profiledial9-tokio-telemetry/Cargo.toml
crates.iodial9-trace-formatdial9-tokio-telemetry/Cargo.toml
crates.iotracing0.1.44dial9-tokio-telemetry/Cargo.toml
crates.iotracing-subscriber0.3dial9-tokio-telemetry/Cargo.toml
crates.iohostname0.4dial9-tokio-telemetry/Cargo.toml
crates.iobon3dial9-tokio-telemetry/Cargo.toml
crates.ioaws-sdk-s31dial9-tokio-telemetry/Cargo.toml
crates.ioaws-config1dial9-tokio-telemetry/Cargo.toml
crates.ioflate21dial9-tokio-telemetry/Cargo.toml
crates.iotime0.3dial9-tokio-telemetry/Cargo.toml
crates.iometrique0.1.23dial9-tokio-telemetry/Cargo.toml
crates.iometrique-timesource0.1dial9-tokio-telemetry/Cargo.toml
crates.ioshuttle0.9.1dial9-tokio-telemetry/Cargo.toml
crates.iodial9-coredial9-tokio-telemetry/Cargo.toml
crates.iodial9-utilsdial9-tokio-telemetry/Cargo.toml
crates.iosyn2dial9-trace-format-derive/Cargo.toml
crates.ioquote1dial9-trace-format-derive/Cargo.toml
crates.ioproc-macro21dial9-trace-format-derive/Cargo.toml
crates.iodial9-trace-format-derivedial9-trace-format/Cargo.toml
crates.ioserde1dial9-trace-format/Cargo.toml
crates.iodial9-coredial9-utils/Cargo.toml
crates.iobon3dial9-utils/Cargo.toml
crates.iotokio1dial9-utils/Cargo.toml
crates.iotracing0.1.44dial9-utils/Cargo.toml
crates.ioaws-sdk-s31dial9-utils/Cargo.toml
crates.ioaws-config1dial9-utils/Cargo.toml
crates.iotime0.3dial9-utils/Cargo.toml
crates.iohostname0.4dial9-utils/Cargo.toml
crates.ioserde1dial9-utils/Cargo.toml
crates.ioserde_json1dial9-utils/Cargo.toml
crates.ioaxum0.8dial9-viewer/Cargo.toml
crates.ioaxum-extra0.10dial9-viewer/Cargo.toml
crates.iobytes1dial9-viewer/Cargo.toml
crates.ioclap4dial9-viewer/Cargo.toml
crates.ioflate21dial9-viewer/Cargo.toml
crates.iofutures0.3dial9-viewer/Cargo.toml
crates.ioserde1dial9-viewer/Cargo.toml
crates.ioserde_json1dial9-viewer/Cargo.toml
crates.iotokio1dial9-viewer/Cargo.toml
crates.iorust-embed8dial9-viewer/Cargo.toml
crates.iomime_guess2dial9-viewer/Cargo.toml
crates.iotower-http0.6dial9-viewer/Cargo.toml
crates.iouuid1dial9-viewer/Cargo.toml
crates.ioform_urlencoded1dial9-viewer/Cargo.toml
crates.iotracing0.1dial9-viewer/Cargo.toml
crates.iotracing-subscriber0.3dial9-viewer/Cargo.toml
crates.iometrique0.1.23dial9-viewer/Cargo.toml
crates.iometrique-writer0.1dial9-viewer/Cargo.toml
crates.iotime0.3dial9-viewer/Cargo.toml
crates.ioaws-config1dial9-viewer/Cargo.toml
crates.ioaws-sdk-s31dial9-viewer/Cargo.toml
crates.ioanyhow1dial9-viewer/Cargo.toml
crates.iobon3dial9-viewer/Cargo.toml
crates.ios3s0.14.1dial9-viewer/Cargo.toml
crates.ios3s-fs0.14.1dial9-viewer/Cargo.toml
crates.ios3s-aws0.14.1dial9-viewer/Cargo.toml
crates.iotempfile3dial9-viewer/Cargo.toml
crates.iodial9-trace-formatdial9-viewer/Cargo.toml
crates.ioarrow54dial9-viewer/Cargo.toml
crates.ioparquet54dial9-viewer/Cargo.toml
crates.ioblake31dial9-viewer/Cargo.toml
crates.iolasso0.7dial9-viewer/Cargo.toml
crates.iorustc-hash2dial9-viewer/Cargo.toml
crates.iodial9-coredial9-viewer/Cargo.toml
crates.iohex0.4dial9-viewer/Cargo.toml
crates.iourlencoding2dial9-viewer/Cargo.toml
crates.iodial9-coredial9/Cargo.toml
crates.iodial9-perf-self-profiledial9/Cargo.toml
crates.iodial9-tokio-telemetry0.5.0-rc0dial9/Cargo.toml
crates.iodial9-macrodial9/Cargo.toml
crates.iodial9-viewer0.5.0-rc1dial9/Cargo.toml
crates.ioanyhow1dial9/Cargo.toml
crates.iotokio1.52.0dial9/Cargo.toml
crates.iobon3dial9/Cargo.toml
crates.iotracing0.1.44dial9/Cargo.toml
crates.iobon3perf-self-profile/Cargo.toml
crates.iobytes1perf-self-profile/Cargo.toml
crates.iocrossbeam-queue0.3perf-self-profile/Cargo.toml
crates.iodial9-coreperf-self-profile/Cargo.toml
crates.iodial9-trace-formatperf-self-profile/Cargo.toml
crates.ioscc2perf-self-profile/Cargo.toml
crates.iotokio1perf-self-profile/Cargo.toml
crates.iotracing0.1.44perf-self-profile/Cargo.toml
Alle Abhängigkeiten nicht erhoben

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 75604,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "CSS": 85778,
        "HTML": 699160,
        "Rust": 3638067,
        "Shell": 43544,
        "Python": 5491,
        "JavaScript": 980781,
        "TypeScript": 2620310
      },
      "pushed_at": "2026-07-24T15:13:25Z",
      "created_at": "2026-02-21T00:30:49Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T14:07:19Z",
      "description": "Tokio Telemetry you can run in production",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust",
        "TypeScript",
        "JavaScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "dial9-rs",
      "company": null,
      "location": null,
      "followers": 3,
      "avatar_url": "https://avatars.githubusercontent.com/u/262900814?v=4",
      "created_at": "2026-02-20T21:52:41Z",
      "is_verified": null,
      "public_repos": 2,
      "account_age_days": 153
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "dial9-v0.5.0-rc1",
          "kind": "other",
          "published_at": "2026-07-24T14:51:41Z"
        },
        {
          "tag": "dial9-viewer-v0.5.0-rc1",
          "kind": "other",
          "published_at": "2026-07-24T14:51:20Z"
        },
        {
          "tag": "dial9-v0.5.0-rc0",
          "kind": "other",
          "published_at": "2026-07-24T01:44:55Z"
        },
        {
          "tag": "dial9-viewer-v0.5.0-rc0",
          "kind": "other",
          "published_at": "2026-07-24T01:44:36Z"
        },
        {
          "tag": "dial9-macro-v0.5.0-rc0",
          "kind": "other",
          "published_at": "2026-07-23T21:21:37Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.5.0-rc0",
          "kind": "other",
          "published_at": "2026-07-23T21:21:29Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.5.0-rc0",
          "kind": "other",
          "published_at": "2026-07-23T21:21:11Z"
        },
        {
          "tag": "dial9-trace-format-v0.5.0-rc0",
          "kind": "other",
          "published_at": "2026-07-23T20:59:09Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.5.0-rc0",
          "kind": "other",
          "published_at": "2026-07-23T20:58:59Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.15",
          "kind": "other",
          "published_at": "2026-07-20T14:50:07Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.14",
          "kind": "other",
          "published_at": "2026-07-09T14:22:46Z"
        },
        {
          "tag": "dial9-v0.3.13",
          "kind": "other",
          "published_at": "2026-05-30T15:03:29Z"
        },
        {
          "tag": "dial9-viewer-v0.3.13",
          "kind": "other",
          "published_at": "2026-05-30T15:03:19Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.13",
          "kind": "other",
          "published_at": "2026-05-30T15:01:52Z"
        },
        {
          "tag": "dial9-v0.3.12",
          "kind": "other",
          "published_at": "2026-05-28T23:31:12Z"
        },
        {
          "tag": "dial9-viewer-v0.3.12",
          "kind": "other",
          "published_at": "2026-05-28T23:31:00Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.12",
          "kind": "other",
          "published_at": "2026-05-28T23:29:37Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.4.3",
          "kind": "other",
          "published_at": "2026-05-28T23:29:02Z"
        },
        {
          "tag": "dial9-trace-format-v0.4.1",
          "kind": "other",
          "published_at": "2026-05-28T23:28:47Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.4.1",
          "kind": "other",
          "published_at": "2026-05-28T23:28:38Z"
        },
        {
          "tag": "dial9-macro-v0.3.7",
          "kind": "other",
          "published_at": "2026-05-28T22:21:37Z"
        },
        {
          "tag": "dial9-v0.3.11",
          "kind": "other",
          "published_at": "2026-05-22T17:55:29Z"
        },
        {
          "tag": "dial9-viewer-v0.3.11",
          "kind": "other",
          "published_at": "2026-05-22T17:55:18Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.11",
          "kind": "other",
          "published_at": "2026-05-22T17:53:48Z"
        },
        {
          "tag": "dial9-v0.3.10",
          "kind": "other",
          "published_at": "2026-05-18T01:34:59Z"
        },
        {
          "tag": "dial9-viewer-v0.3.10",
          "kind": "other",
          "published_at": "2026-05-18T01:34:48Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.10",
          "kind": "other",
          "published_at": "2026-05-18T01:33:19Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.4.2",
          "kind": "other",
          "published_at": "2026-05-18T01:32:48Z"
        },
        {
          "tag": "dial9-v0.3.9",
          "kind": "other",
          "published_at": "2026-05-14T21:02:00Z"
        },
        {
          "tag": "dial9-viewer-v0.3.9",
          "kind": "other",
          "published_at": "2026-05-14T21:01:47Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.9",
          "kind": "other",
          "published_at": "2026-05-14T21:00:21Z"
        },
        {
          "tag": "dial9-v0.3.8",
          "kind": "other",
          "published_at": "2026-05-09T01:27:17Z"
        },
        {
          "tag": "dial9-viewer-v0.3.8",
          "kind": "other",
          "published_at": "2026-05-09T00:24:10Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.8",
          "kind": "other",
          "published_at": "2026-05-09T00:22:46Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.4.1",
          "kind": "other",
          "published_at": "2026-05-09T00:22:10Z"
        },
        {
          "tag": "dial9-trace-format-v0.4.0",
          "kind": "other",
          "published_at": "2026-05-09T00:21:57Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.4.0",
          "kind": "other",
          "published_at": "2026-05-09T00:21:50Z"
        },
        {
          "tag": "dial9-viewer-v0.3.7",
          "kind": "other",
          "published_at": "2026-05-04T20:53:06Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.7",
          "kind": "other",
          "published_at": "2026-05-04T20:51:40Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.4.0",
          "kind": "other",
          "published_at": "2026-05-04T20:51:07Z"
        },
        {
          "tag": "dial9-macro-v0.3.6",
          "kind": "other",
          "published_at": "2026-05-04T20:50:52Z"
        },
        {
          "tag": "dial9-viewer-v0.3.6",
          "kind": "other",
          "published_at": "2026-05-01T19:14:15Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.6",
          "kind": "other",
          "published_at": "2026-05-01T19:12:46Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.3.6",
          "kind": "other",
          "published_at": "2026-05-01T19:12:13Z"
        },
        {
          "tag": "dial9-trace-format-v0.3.6",
          "kind": "other",
          "published_at": "2026-05-01T19:12:00Z"
        },
        {
          "tag": "dial9-viewer-v0.3.5",
          "kind": "other",
          "published_at": "2026-04-24T17:43:28Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.5",
          "kind": "other",
          "published_at": "2026-04-24T17:41:51Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.3.5",
          "kind": "other",
          "published_at": "2026-04-24T17:41:17Z"
        },
        {
          "tag": "dial9-trace-format-v0.3.5",
          "kind": "other",
          "published_at": "2026-04-24T17:41:02Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.3.5",
          "kind": "other",
          "published_at": "2026-04-24T17:40:55Z"
        },
        {
          "tag": "dial9-macro-v0.3.5",
          "kind": "other",
          "published_at": "2026-04-24T17:40:48Z"
        },
        {
          "tag": "dial9-viewer-v0.3.4",
          "kind": "other",
          "published_at": "2026-04-23T18:47:23Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.4",
          "kind": "other",
          "published_at": "2026-04-23T18:45:54Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.3.4",
          "kind": "other",
          "published_at": "2026-04-23T18:45:22Z"
        },
        {
          "tag": "dial9-trace-format-v0.3.4",
          "kind": "other",
          "published_at": "2026-04-23T18:45:08Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.3.4",
          "kind": "other",
          "published_at": "2026-04-23T18:45:02Z"
        },
        {
          "tag": "dial9-macro-v0.3.4",
          "kind": "other",
          "published_at": "2026-04-23T18:44:56Z"
        },
        {
          "tag": "dial9-viewer-v0.3.3",
          "kind": "other",
          "published_at": "2026-04-21T00:22:57Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.3",
          "kind": "other",
          "published_at": "2026-04-21T00:21:20Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.3.3",
          "kind": "other",
          "published_at": "2026-04-21T00:20:49Z"
        },
        {
          "tag": "dial9-trace-format-v0.3.3",
          "kind": "other",
          "published_at": "2026-04-21T00:20:37Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.3.3",
          "kind": "other",
          "published_at": "2026-04-21T00:20:29Z"
        },
        {
          "tag": "dial9-macro-v0.3.3",
          "kind": "other",
          "published_at": "2026-04-21T00:20:25Z"
        },
        {
          "tag": "dial9-viewer-v0.3.2",
          "kind": "other",
          "published_at": "2026-04-20T23:16:01Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.2",
          "kind": "other",
          "published_at": "2026-04-20T23:14:31Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.3.2",
          "kind": "other",
          "published_at": "2026-04-20T23:13:59Z"
        },
        {
          "tag": "dial9-trace-format-v0.3.2",
          "kind": "other",
          "published_at": "2026-04-20T23:13:46Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.3.2",
          "kind": "other",
          "published_at": "2026-04-20T23:13:41Z"
        },
        {
          "tag": "dial9-macro-v0.3.2",
          "kind": "other",
          "published_at": "2026-04-20T23:13:35Z"
        },
        {
          "tag": "dial9-viewer-v0.3.1",
          "kind": "other",
          "published_at": "2026-04-20T20:00:41Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.1",
          "kind": "other",
          "published_at": "2026-04-19T17:57:48Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.3.1",
          "kind": "other",
          "published_at": "2026-04-19T17:57:17Z"
        },
        {
          "tag": "dial9-trace-format-v0.3.1",
          "kind": "other",
          "published_at": "2026-04-19T17:57:03Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.3.1",
          "kind": "other",
          "published_at": "2026-04-19T17:56:56Z"
        },
        {
          "tag": "dial9-macro-v0.3.1",
          "kind": "other",
          "published_at": "2026-04-19T17:56:50Z"
        },
        {
          "tag": "dial9-viewer-v0.3.0",
          "kind": "other",
          "published_at": "2026-04-18T01:25:27Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.3.0",
          "kind": "other",
          "published_at": "2026-04-18T01:23:37Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.3.0",
          "kind": "other",
          "published_at": "2026-04-18T01:22:47Z"
        },
        {
          "tag": "dial9-trace-format-v0.3.0",
          "kind": "other",
          "published_at": "2026-04-18T01:21:46Z"
        },
        {
          "tag": "dial9-trace-format-derive-v0.3.0",
          "kind": "other",
          "published_at": "2026-04-18T01:21:07Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.2.0",
          "kind": "other",
          "published_at": "2026-03-20T16:36:23Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.2.0",
          "kind": "other",
          "published_at": "2026-03-20T16:35:37Z"
        },
        {
          "tag": "dial9-tokio-telemetry-v0.1.1",
          "kind": "other",
          "published_at": "2026-03-03T02:11:14Z"
        },
        {
          "tag": "dial9-perf-self-profile-v0.1.1",
          "kind": "other",
          "published_at": "2026-03-03T02:10:44Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-03-01T21:01:47Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "755d86393c4bfe4423aa72038c015296bfc3c3db",
          "body": "* chore: release\n\n* chore: release 0.5.0-rc1; make dial9 the changelog aggregator\n\n---------\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: Julian <julian@wyeworks.com>",
          "is_bot": true,
          "headline": "chore: release v0.5.0-rc.1 (#709)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-24T13:56:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcbc00f2489fb3eb6641b9696271106b3c912897",
          "body": "* feat(viewer): support multi-service S3 browsing\n\n* fix(viewer): fix five multi-service browse bugs\n\n- actions-bar: use profileSel.bytes (not nullable sel.bytes) in the\n  size-cap warning, fixing a null-deref when the cap is driven by\n  full-service segments with no box selection.\n- index.html: cle\n[…]\netch mock made\nmock.calls[n][0] index an empty tuple (TS2493). Give it a typed\n_url parameter, matching the other fetch mock in this file.\n\n* docs: remove internal design doc referencing Taskei ticket",
          "is_bot": false,
          "headline": "Add support for service-awareness in the browser (#711)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-24T13:21:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d254f2b3e71e44f567f011686842f979565d9e4",
          "body": "…#712)\n\n* fix(dial9): viewer/CLI off by default\n\n* update changelog\n\n* test(dial9): gate cli_trace_shape behind the cli feature\n\n* ci: build binstall binary with cli, smoke-test it\n\n* fix(dial9): set tokio_unstable for docs.rs build",
          "is_bot": false,
          "headline": "refactor: make viewer/cli feature off by default & update changelog (…",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-07-24T12:15:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90d973ad0943db09e6d6b8f0d542d31baf015342",
          "body": null,
          "is_bot": false,
          "headline": "fix(release): allow-dirty publish for dial9-viewer (#710)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-07-23T23:51:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcd33aec39f974adf7fd0b34c52a42178fc41e13",
          "body": "The columnar path routes SPAN events out of customEvents into a separate\nspan-event store, so an all-span trace (e.g. a shale trace of only\nSpanEnter__/SpanExit__) leaves customEvents empty while the spans live in\nprecomputedSpanData. computeSpanTrackData bailed to EMPTY_SPAN_TRACK_DATA on\nempty customEvents, dropping the Spans track entirely. Only bail when there is\nneither precomputed span data nor events to build it from.",
          "is_bot": false,
          "headline": "fix(viewer): render spans for all-span traces in new viewer (#705)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-23T20:58:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0e712ab955d853b26b232a6658489994a07feaf",
          "body": null,
          "is_bot": false,
          "headline": "Delete HANDOFF.md (#707)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-23T18:32:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27ac964c35be71884241be50d075911298323cda",
          "body": "Record the number of alive tasks via RuntimeMetrics::num_alive_tasks()\nin each QueueSampleEvent sample. This gives visibility into task\nlifecycle pressure alongside the existing global queue depth metric.\n\n- Wire format: new `active_tasks: u64` field (LEB128 encoded)\n- Analysis: `active_tasks: Option<u64>` (None for old traces)\n- Source: summed from all attached runtimes via Tokio metrics",
          "is_bot": false,
          "headline": "feat: add active task count to QueueSampleEvent (#496) (#675)",
          "author_name": "Scriptize",
          "author_login": "Scriptize",
          "committed_at": "2026-07-23T17:04:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90e06a29006a28f1b61711526a3d5474bbf0ec28",
          "body": null,
          "is_bot": false,
          "headline": "fix(viewer): deflake tight-loop recipe snippet test (#706)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-07-23T17:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9c77785cf9f2feddca86be65cc9d4d002d0bd46",
          "body": null,
          "is_bot": false,
          "headline": "fix(viewer): carry queue step line's true level, not spike (#704)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-07-23T17:01:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "098b6b7137b722a30acfdc0be0bf92629409614f",
          "body": "* test(dial9): compile-test README examples, drop all `ignore`\n\n* ci: don't apt-install jq in check-docs when it's already present",
          "is_bot": false,
          "headline": "test(dial9): compile-test README examples, drop all `ignore` (#703)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-07-23T16:41:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eacf89e2a9d292c29a9a455a725b4a3cf6dea413",
          "body": "* feat(viewer): add sanitized trace shape generation\n\nAdd extract, generate, and direct synthesize workflows for producing\nshareable trace-shaped fixtures without preserving direct source labels or\nabsolute timestamps. Direct synthesis avoids materializing the 744 MB JSON\nrepresentation observed for\n[…]\nry is derived entirely by recompute_summary() over\nthe finished shape events (see the SUMMARY CONSISTENCY comment). These\nwere leftovers from before that refactor.\n\nAddresses PR feedback from @Fluzko.",
          "is_bot": false,
          "headline": "feat(viewer): add sanitized trace generator (#680)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-23T16:21:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "92a76648323f2a8e31a0d811ca85a2ed99cfb562",
          "body": "Consume stream and timestamp resets iteratively in both decoder paths so\nmalformed input cannot exhaust the call stack. Return a decode error when a\ntimestamp delta would overflow instead of wrapping or panicking.\n\nAdd focused regressions for long reset runs and timestamp overflow.",
          "is_bot": false,
          "headline": "fix(format): harden decoder reset handling (#681)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-23T11:59:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68abe25be9f70deb6e2e5cc2df6083152c6895e7",
          "body": "* refactor!: tokio instrumentation as a source\n\nTokio becomes source on a Recorder now, instead of a wrapper around one.\nrecorder(writer).build().attach_runtime(|t| ..) hands back the recorder\nand an instrumented runtime, users call it again to attach a second.\n\nGone: TracedRuntime, TracedRuntimeBui\n[…]\nith Option<Vec<_>>\n\n* refactor: rename attach_runtime to attach_tokio_runtime\n\n* test: read runtime metadata off the sealed trace, not live sources\n\n* test: give background symbolization room to drain",
          "is_bot": false,
          "headline": "refactor!: tokio instrumentation as a source (#698)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-07-22T20:52:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ae328f05bcffe2d6527059f71d05a70d262cf33",
          "body": "* feat(viewer): add Span Explorer with bounded exemplar refresh\n\n* feat(viewer): add spans explorer on new UI\n\n---------\n\nCo-authored-by: fluzko <fnluzko@gmail.com>",
          "is_bot": false,
          "headline": "feat(viewer): add Span Explorer with bounded exemplar refresh (#694)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-22T20:45:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e76dce77a0340193530bd3f1ab776d0f2f9d93f9",
          "body": null,
          "is_bot": false,
          "headline": "feat(viewer): bound and instrument aggregate folding (#693)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-22T18:48:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a124b5a75beee9b97f1b3a06c0cabb9b46464110",
          "body": null,
          "is_bot": false,
          "headline": "feat(viewer): add generalized span analysis APIs (#700)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-22T18:13:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0621a4aec3cdf4a69b6cccff1d7ca5d74437b05",
          "body": null,
          "is_bot": false,
          "headline": "feat(viewer): persist folded tracing spans (#691)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-22T15:32:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f394f078071813ee6f91bed4d1d97070a5f60e3",
          "body": "* fix(viewer): classify IllegalLocationConstraintException as WrongRegion\n\nA BYOC request for a bucket in an opt-in region (e.g. af-south-1) that is\naddressed through a region-specific endpoint the request wasn't signed for\nreturns `IllegalLocationConstraintException` (HTTP 400) instead of the 301\n`\n[…]\nhe server, so make the existing StorageBackend, HTTP, and JS list-buckets contracts region-bearing directly instead of maintaining a duplicate details API.\n\n* fix(viewer): use listed regions in new UI",
          "is_bot": false,
          "headline": "fix(viewer): autodetect regions for listed S3 buckets (#688)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-22T15:26:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "339df5174a28ea2a56a3c5eb8f940d2da734b0d3",
          "body": "* feat(viewer): cache aggregate output locally by default\n\n* feat(profiler): record effective profiling configuration",
          "is_bot": false,
          "headline": "feat(profiler): record effective profiling configuration (#690)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-22T14:28:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67d38733d831acdee70b5f95547a52aad5bbf2d3",
          "body": "* feat(viewer/parity): perf probe with pluggable render source (T12 layer e)\n\nparity/perf-probe.mjs: run a journey to a representative state (defaults\nJ6/J1/J5 per page kind), then drive a scripted interaction storm (hover\nsweeps / drags / wheel zooms / arrow pans in the journey step\nvocabulary) and\n[…]\nrfaces call injected seams (T31/T32/T34).\n\n* docs(exec-plan): T29 merged (cross-ticket tsc break fixed); T31 dispatched\n\n* feat(T34): wire load chrome into the viewer shell (drop zone + New File)\n\nTh…",
          "is_bot": false,
          "headline": "feat(viewer): Migration (#665)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-07-21T20:17:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9bc13ea03812665a1cbfc65d87ba88ea2fe29329",
          "body": "* feat(android): add CPU profiling support\n\nCo-authored-by: Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>\n\n* ci: add Android aarch64 build coverage\n\n* fix: address issues from pixel test\n\n- Perf backend double-registration causing EINVAL.\n- Forced CPU-timer fallback producing one-frame sta\n[…]\nipt\n\n* fix(android): avoid registering ART thread with explicit ctimer\n\n* fix(android): bump libc version to 0.2.188\n\n---------\n\nCo-authored-by: Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>",
          "is_bot": false,
          "headline": "Add Android CPU Profiling Support (#685)",
          "author_name": "Nick Robinson",
          "author_login": "nickrobinson",
          "committed_at": "2026-07-21T15:47:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "925997e8e0ca2a63f241622445b5a6d0b0d74de7",
          "body": "…(#670)\n\n* feat(viewer): Tokio Stats \"Worker activity\" rollup\n\nPort IRIS's `workers` rollup into the Tokio Stats aggregate page with\nbusyness metric and multi-runtime awareness.\n\nServer: `worker_activity: Vec<WorkerStats>` keyed by (host, worker_id)\nso multi-host scopes don't conflate workers from d\n[…]\nadded\nhostWorkerCounts tests, added busy_pct ≤ 100% invariant to the demo\ntest. cargo test --lib + node ui tests green; fmt + clippy clean.\n\n---------\n\nCo-authored-by: Prabhat Jain <pjainp@amazon.com>",
          "is_bot": false,
          "headline": "feat(viewer): Tokio Stats \"Worker activity\" rollup + focus deep-link …",
          "author_name": "Prabhat Jain",
          "author_login": "prabrat",
          "committed_at": "2026-07-21T00:12:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "74bd23f29aea1c7c7b62748e6a1eddaeee63abbc",
          "body": "* feat(dial9): scaffold facade lib (re-exports + record_event)\n\n* refactor!: move the #[main] macro to the dial9 facade\n\n* refactor: relocate remaining examples to the dial9 facade\n\n* refactor: default the flush metrics sink; drop metrique-writer dep\n\n* refactor: make CoreSession the RAII recording \n[…]\n make dial9's readme the main one\n\n* fix(test): restore 10s graceful_shutdown drain in writeback test\n\n* fix(test): migrate task_dump re-poll test to the recorder(MemoryBuffer) API\n\n* update changelog",
          "is_bot": false,
          "headline": "refactor: make dial9 the facade (#614)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-07-20T09:49:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "76c61f4232f40e69bb34bfeb282f67a80ab88aaf",
          "body": "To sample a task-dump backtrace, TaskDumped polls the inner future a\nsecond time and discarded the result. On a multi-threaded runtime that\nre-poll can legitimately return Ready (a resource the future is parked\non is readied by another thread between the primary poll and the capture\nre-poll). The co\n[…]\non test that spawns a future which completes on its second\npoll (the capture re-poll); it panicked before this fix and passes now.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(taskdump): propagate Ready from the capture re-poll (#679)",
          "author_name": "mitchsw",
          "author_login": "mitchsw",
          "committed_at": "2026-07-17T20:52:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "215cf8fa9ec1d7ffd200107b8623875ca421d90f",
          "body": "* feat(viewer): cache aggregate output locally by default\n\n* refactor(viewer): bundle aggregate output into one AggOutput value\n\nCollapse the scattered agg_output_bucket / agg_output_backend Option pair\nand its four new_temporary_aggregate() fallbacks into a single non-optional\nAggOutput on AppState\n[…]\nh two named\nconstructors (s3 / temporary) rather than three independently-optional\nfields. No capability change: S3 output (persistent) and temporary local\noutput (default, wiped on drop) both remain.",
          "is_bot": false,
          "headline": "Add local mode for aggregation (#671)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-17T20:43:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "67141e4f39cf4eb742378eb5b113481a10b75d9a",
          "body": "…lls (#661)\n\nClicking a tracing span often failed to jump to its task, and long-lived\nrequest spans (e.g. GET /jobs/next) rendered as 100% active with no idle\nband. Both stem from how span segments were built.\n\nRoot causes:\n- A span segment recorded the ENTER timestamp paired with the EXIT event's\n \n[…]\nentity/multi-segment),\nresolveSpanTask (binary search, gap/unknown-worker/taskId-0 -> null),\nbuildSpanData integration (reconstruction, recycled-task-id not borrowed,\nno-workerSpans backwards compat).",
          "is_bot": false,
          "headline": "fix(viewer): resolve span task + reconstruct active/idle from task po…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-15T10:06:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13519f63f2ca025aa581ea3d6798ddb3a88303e2",
          "body": "* Add poll-time bands to flamegraph view\n\n* fix(viewer): restore aws_region forwarding + disjoint fast/slow poll split\n\n- flamegraph_diff_view.js: restore aws_region to SERVER_KEYS. It was\n  accidentally dropped when adding min_poll_ns/max_poll_ns, so apiUrlFor\n  stopped forwarding it and cross-regi\n[…]\nn scope\nchange so it re-seeds to the new distribution; 'Refine more' keeps the\nuser's chosen split (same scope, deeper sampling).\n\nAlso drop the extra blank lines flagged by cargo fmt in aggregate.rs.",
          "is_bot": false,
          "headline": "Poll-time aware flamegraphs (#663)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-14T19:53:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0de9b20b8183cdc25c259a51ea2147e3b854a737",
          "body": "* feat(viewer): v0 of flamegraph inspect\n\n* test(viewer): add flamegraph inspect tests missed from v0 commit\n\n* feat(viewer): track viewer state in url for flamegraph\n\n* fix(ci): add missing flamegraph deeplink test and view state module\n\n* Properly integrate and improve the flamegraph view state\n\n*\n[…]\npied link lost the\nzoom). Persist the in-flight pendingZoom target instead; commitZoom still\nclears it first so explicit navigation persists correctly.\n\nAdds a regression test (fails without the fix).",
          "is_bot": false,
          "headline": "feat(viewer): v0 of flamegraph inspect (#664)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-14T18:02:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9359b66700fb074aaf95dcc8d762a25605568012",
          "body": "* viewer: split serve() into build_app() so embedders own binding\n\nserve() both assembled the axum app AND bound the listener, so an embedder\ncould not add routes or wrap middleware (e.g. auth) around the whole app\nwithout duplicating the ~200-line assembly.\n\nSplit it into `pub build_app(ViewerConfi\n[…]\nregation), then `.merge()` custom routes,\n`.layer()` middleware (auth), and bind it yourself. Also demonstrate the\ncaller-owned `init_tracing`, `attach_request_metrics`, and\n`shutdown_signal` helpers.",
          "is_bot": false,
          "headline": "viewer: split serve() into build_app() so embedders own binding (#666)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-14T15:02:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4174031d84ba1d757c019c77bda24468e9ce874f",
          "body": "…bject (#668)\n\n* Drop aws-sdk-s3-transfer-manager, upload segments via aws-sdk-s3 PutObject\n\n`worker-s3` pulled in `aws-sdk-s3-transfer-manager`, which dragged a legacy\nrustls 0.21 / hyper 0.14 TLS stack and `rustls-webpki` 0.101.7 into the graph,\ncarrying RUSTSEC-2026-0098/-0099/-0104. Downstreams \n[…]\nsupplied\nclient passed through `.s3_with_client(..)` keeps its own timeout configuration\nuntouched.\n\nCo-Authored-By: heihutu <heihutu@gmail.com>\n\n---------\n\nCo-authored-by: heihutu <heihutu@gmail.com>",
          "is_bot": false,
          "headline": "Drop aws-sdk-s3-transfer-manager, upload segments via aws-sdk-s3 PutO…",
          "author_name": "houseme",
          "author_login": "houseme",
          "committed_at": "2026-07-14T14:42:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d5ef042833aa2ea9a5406d23a7aeaaa2c51f7d29",
          "body": "Add new example demonstrating how to embed the viewer in a larger system",
          "is_bot": false,
          "headline": "viewer: Support extensibility by exposing `AppState::from_bucket` (#662)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-13T18:13:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d032618339b3f910d1594739c40b9f37734ba6e3",
          "body": "* Revise SECURITY.md for version support and reporting\n\nUpdated the security support table and reporting instructions.\n\n* fix: add correct AWS vulnerability reporting link\n\nRemove template placeholder text and add the actual link to\nhttp://aws.amazon.com/security/vulnerability-reporting/",
          "is_bot": false,
          "headline": "Add SECURITY.md (#612)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-13T15:48:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9793db572dcbc281c6c38dedc038a5aa71ef970",
          "body": "… constructors (#660)\n\nIntroduce CpuProfilingConfig::with_perf_backend() and\nCpuProfilingConfig::with_ctimer_backend() constructors for explicit\nbackend selection:\n\n- with_perf_backend() — perf only, no ctimer fallback. Fails if\n  perf_event_open is blocked.\n- with_ctimer_backend() — ctimer only, avoids perf's per-CPU inherited\n  context overhead on thread-heavy workloads.\n\nhttps://github.com/dial9-rs/dial9/issues/579\n\nCo-authored-by: Jason Gin <jasgin@amazon.com>",
          "is_bot": false,
          "headline": "feat: explicit CPU profiling backend selection via CpuProfilingConfig…",
          "author_name": "Jason Gin",
          "author_login": "jasgin",
          "committed_at": "2026-07-10T18:26:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69947e6a81e9115a1b2d2468f7e5db82dedff164",
          "body": "* viewer: classify S3 NoSuchBucket/NoSuchKey as 404, not 500\n\nBrowsing a nonexistent bucket returned HTTP 500 with a server `fault`.\nThe S3 `NoSuchBucket`/`NoSuchKey` error codes fell through the\n`classify_s3_error` catch-all to `StorageError::Other`, which logged an\n\"unclassified S3 error\" and mapp\n[…]\na well-formed but nonexistent bucket → 404), an invalid\nname is a malformed request, so map it to a new StorageError::BadRequest → HTTP\n400 rather than folding it into NotFound. Add a regression test.",
          "is_bot": false,
          "headline": "viewer: classify S3 NoSuchBucket/NoSuchKey as 404, not 500 (#635)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-10T18:18:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a9011612618c6889532b0d897bc1af0370746be3",
          "body": "* Sample SchedStat::read_current in worker park/unpark\n\nReading /proc/self/task/<tid>/schedstat on every worker park and unpark\nconsumes measurable CPU. As noted in #557, scheduler latency is still\nobservable with periodic sampling, so there is no need to read schedstat\non every park.\n\nRead schedsta\n[…]\nand that Some(0) still counts. All lib tests,\nthe JS-parser round-trip, and viewer JS tests pass.\n\n* fix(clippy): use is_multiple_of in advance_park_counter\n\n* Report schedstat sample rate in metadata",
          "is_bot": false,
          "headline": "Sample SchedStat::read_current in worker park/unpark (#619)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-10T16:16:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e78d8459b792c68ceae26c8f6c4b1575d0ee3726",
          "body": "* fix(viewer): enable flamegraph Export in aggregated/API mode\n\nsetTreeDirect() (API/aggregated render path) bypassed applyFilters(), so\nthe Export button stayed stuck disabled. Extract updateExportState() and\ncall it from both render paths; also fix the exported header prefix to\n\"All threads\" for a\n[…]\n\ntest's `global.navigator = {...}` stub threw \"Cannot set property\nnavigator\". Save/restore its property descriptor and stub via\nObject.defineProperty, which works on both Node 18 (local) and Node 24.",
          "is_bot": false,
          "headline": "fix(viewer): enable flamegraph Export in aggregated/API mode (#650)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-10T14:52:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b423ed84d6ceaae677fc0ee26b83b228691250b",
          "body": "* fix(viewer): add keyboard search focus to diff flamegraph\n\nSupport Ctrl/Cmd+F and bare \"/\" to focus the highlight/search box in\nthe differential flamegraph view, mirroring the single-flamegraph\nhandler. Escape now returns early after resetting zoom.\n\nFixes #622\n\n* fix(viewer): preserve heatmap sel\n[…]\ns the flamegraph Diff dialog exactly. Presets show only while A is\nset and B is empty; time-shift needs a window on A, and the host\ndropdown is disabled when no other host is present.\n\nRelates to #624",
          "is_bot": false,
          "headline": "fix(viewer): browse-view + flamegraph-diff UI papercuts (#623) (#655)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-10T14:31:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ea5686135c768403f72494de60cda91d7f15daf",
          "body": "…root (#656)\n\nThe browse page has a special case (issue #471) for buckets with no key\nprefix, where trace data lives directly under YYYY-MM-DD/ date partitions:\nit empties the search prefix instead of offering the dates as selectable\nprefixes. isDateLayer() gated this on *every* root child being a d\n[…]\nusing to\nempty the prefix on an ambiguous 50/50 listing.\n\nRepro'd against bamboo-dial9-gamma-us-west-2-0001 (64 dates + diagnostics/):\nisDateLayer was false, empty-prefix browse returns 100k+ objects.",
          "is_bot": false,
          "headline": "fix(viewer): recognize date layer when aux sibling folders share the …",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-10T13:52:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "20388826260d156037e1f022f7ae7aaacde202b1",
          "body": "* Add minimal-spans example / viewer support\n\n* fix(ci): drop dangling test_custom_spans.js ref; bump crossbeam-epoch\n\nTrace Integrity job failed with MODULE_NOT_FOUND: the e2e script\nreferenced dial9-viewer/ui/test_custom_spans.js, which was never\ncreated. The custom-span (SpanEnter__/SpanExit__) c\n[…]\nhe dangling reference.\n\nsecurity_audit failed on RUSTSEC-2026-0204 (crossbeam-epoch 0.9.18,\ninvalid pointer deref in fmt::Pointer), a newly-published advisory.\nBump the lockfile to the patched 0.9.20.",
          "is_bot": false,
          "headline": "Add minimal-spans example / viewer support (#588)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-10T00:59:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "20bc47515ba2bd92860d6d4cc6d23d5b7d942102",
          "body": null,
          "is_bot": false,
          "headline": "Commit branch protection rules to git (#629)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-10T00:59:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ae48f6b5aefb92460797e6a824e6edb32622a89",
          "body": "…se-branch releases (#640)\n\n* feat(release): parameterize publish workflow by release branch\n\nThe publish workflow (`workflow_dispatch`) previously ran the copy of\nrelease.yml on whatever ref it was dispatched against. That meant each\n`release-*` branch carried its own fork of the workflow, and impr\n[…]\n is a workflow input (avoids per-branch\nworkflow drift) and why pr_branch_prefix must differ per series and stay\nslash-terminated (avoids release-* protection collisions and cross-series\nPR closures).",
          "is_bot": false,
          "headline": "feat(release): parameterize publish workflow + document main vs relea…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-10T00:59:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f1bd5a2df8f5e96275b2d8db97352617fa910bc9",
          "body": "…(#621)\n\nThe bucket's region is a property of the bucket, not a credential — yet it\nonly ever traveled as a per-request header derived from this-tab's session\ncredentials. So a viewer/flamegraph/tokio-stats link was NOT self-contained:\nregion survived only because a same-origin new tab inherited the\n[…]\ntest_trace_scope.js (region round-trip incl. empty, scopeFromKeys\nthreading, aggregation round-trip) and test_flamegraph_diff.js (fullScopeQuery\n+ apiUrlFor carry aws_region). All UI logic tests pass.",
          "is_bot": false,
          "headline": "feat(viewer): carry aws_region in viewer/flamegraph/tokio-stats URLs …",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-09T17:42:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ac760a908aabb302e2fc22c736342d00ff57b02",
          "body": "…#610)\n\n* docs(viewer): add UI migration plan, inventories, and perf findings\n\n* add ux findings\n\n* add heavy loads missing docs",
          "is_bot": false,
          "headline": "docs(viewer): add UI migration plan, inventories, and perf findings (…",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-07-09T17:36:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89f8113f7a0474f18d8e9686dd83b63b69de2455",
          "body": "…639)\n\nAdd a top-N longest-polls rollup to the Tokio Stats page: the single\nfutures that held a worker thread longest in one poll (these starve\nother tasks on that worker). The server ranks polls by duration and\nships a bounded top-100 (task_id is high-cardinality, so this is a\nserver-side reduction\n[…]\natency-heat\nhelper and focus_* deep-link params; add test_focus_timebase.js pinning\nthe wall->monotonic round-trip (registered in e2e-trace-tests.sh).\n\nCo-authored-by: Prabhat Jain <pjainp@amazon.com>",
          "is_bot": false,
          "headline": "feat(viewer): Tokio Stats \"Longest polls\" rollup + focus deep-link (#…",
          "author_name": "Prabhat Jain",
          "author_login": "prabrat",
          "committed_at": "2026-07-09T17:29:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a87d732dffaf84af8a34a88ef84cdb6a8da0d7b",
          "body": "release-plz creates its release PR from an ephemeral branch named\n`release-plz-<timestamp>`. That name matches the `release-*`\nbranch-protection rulesets on this repo — in particular the admins-only\n`Restrict release-* creation` ruleset — so GitHub rejects the branch push\nwith \"Cannot create ref due\n[…]\n `release-*` glob does not cross `/`,\nso the slash form is exempt from the rulesets while staying recognizable.\n\nThis restores the Release PR automation (last two runs on main failed for\nthis reason).",
          "is_bot": false,
          "headline": "fix(release): use slash in release-plz PR branch prefix (#633)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-09T13:41:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e825730beafae9296939db3550dc68cd581e06cb",
          "body": "Open perf events only for CPUs in the process's affinity mask, read\nfrom /proc/self/status Cpus_allowed_list. This avoids inheriting perf\ncontexts for CPUs the process can never run on, eliminating the\nthread-spawn overhead that caused blocking-thread amplification under\nTokio.\n\nhttps://github.com/dial9-rs/dial9/issues/579\n\nCo-authored-by: Jason Gin <jasgin@amazon.com>",
          "is_bot": false,
          "headline": "fix(perf): use process affinity mask instead of all online CPUs (#632)",
          "author_name": "Jason Gin",
          "author_login": "jasgin",
          "committed_at": "2026-07-09T02:03:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaea4e388161b23857b77a01d3a425a680796649",
          "body": "…(#627)\n\nIn local mode (--local-dir), browse now does a flat listing instead of\ndate-prefix fan-out, so on-disk buffer traces ({boot_id}/trace.{N}.bin)\nare discoverable. The heatmap falls back to file mtime when the filename\nhas no epoch, and clicking opens traces directly by key.\n\nCo-authored-by: Jason Gin <jasgin@amazon.com>",
          "is_bot": false,
          "headline": "fix(viewer): browse finds local traces without date-structured paths …",
          "author_name": "Jason Gin",
          "author_login": "jasgin",
          "committed_at": "2026-07-08T17:50:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "878ec0ae7f81d672991c63067789b779128b4390",
          "body": "* feat(viewer): thread aws_role_arn from the URL through to /api requests\n\nThe server-side assume-role path (CredSource::AssumeRole, driven by\n?aws_role_arn=… or the x-dial9-aws-role-arn header) shipped server-only:\nthe frontend parsed bucket/aws_region from the landing-page URL but\ndropped aws_role\n[…]\nset() (the stable scripting API) is preserved. Extends test_creds.js\nwith setRegion static+role coverage and legacy-bag classification;\nreframes the old precedence test as a classify() invariant test.",
          "is_bot": false,
          "headline": "Handle role_arn in the viewer (#615)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-06T20:52:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "036d06672d6041928511321844b36555cc5a8d3a",
          "body": "…s (#616)\n\n* fix(viewer): repair malformed module-doc heading in metrics.rs\n\nThe `## Dimensions` section heading was concatenated onto the end of the\npreceding prose line (`... [`record_request_metrics`]). //! ## Dimensions`),\nso rustdoc rendered it as literal inline text instead of a section headin\n[…]\nadd a .gitignore rule matching the timestamped agent-transcript filename\npattern (YYYY-MM-DD-HHMMSS-*.txt) so future sessions can't be committed by\naccident, while leaving ordinary .txt files tracked.",
          "is_bot": false,
          "headline": "fix(viewer): address AutoCRReviewer findings from last 10 main commit…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-06T20:52:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "177eb987a1ed5c65c852ea6212826dadfd31013b",
          "body": "* feat(viewer): smaller first fold + \"Load more data\" in the diff view\n\nThe diff view opens TWO /api/flamegraph streams at once, and each was folding\nto the server default cap (up to ~100 files x ~40-50 MB). That is ~200\nconcurrent large GETs, enough to saturate a Fargate task's egress and blow the\n\n[…]\n\nAddresses review feedback: callers no longer pass positional `undefined`\nfor the origin arg. apiUrlFor({scope, maxFiles}) reads clearly and lets\ncallers omit fields instead of padding with undefined.",
          "is_bot": false,
          "headline": "small flamegraph / diff improvements (#613)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-06T19:04:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "88f2bdde4e969b78abcb9c0d62f52c37865e6efc",
          "body": "… flamegraph/tokio-stats) (#603)\n\n* feat(viewer): stream flamegraph/tokio-stats aggregation over SSE\n\nThe aggregate flamegraph and tokio-stats APIs previously used a client\npolling model: each poll folded a small batch of source files and the\nbrowser re-polled, re-aggregating the whole folded set ev\n[…]\nrs on. Equal-total cases are unchanged\n(shared eps == the old per-side eps when tA == tB), so all existing color\ntests still hold.\n\nAdds regression tests for the lopsided-totals case (and its mirror).",
          "is_bot": false,
          "headline": "feat(viewer): Add differential flamegraph + A/B diff capture (unified…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-06T13:53:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ab731f5e7fe1385f2fee1fd68a4349aa34b5b84d",
          "body": null,
          "is_bot": false,
          "headline": "viewer: Improve Tokio stats page (#592)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-06T13:02:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba7205e08374ebbed31d7877853695271e845452",
          "body": "* feat(viewer): stream flamegraph/tokio-stats aggregation over SSE\n\nThe aggregate flamegraph and tokio-stats APIs previously used a client\npolling model: each poll folded a small batch of source files and the\nbrowser re-polled, re-aggregating the whole folded set every time\n(O(folded^2) reads). This\n[…]\n\n  returned promise, which resolves on close, abort, or error alike.\n- sse.js: correct the openSse doc — the returned promise never rejects;\n  errors are reported via onError and the promise resolves.",
          "is_bot": false,
          "headline": "feat(viewer): stream flamegraph/tokio-stats aggregation over SSE (#602)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-06T11:16:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e80cdc756bee9542f510fa10bab88409aa8f8a70",
          "body": "* viewer: Minimal metrique metrics\n\n* viewer: operation-specific request metrics\n\nAdd an OperationMetrics entry enum (metrique tag+subfield) flattened into\nRequestMetrics, carrying per-operation signals the generic\ncount/fault/error/latency fields can't see:\n\n- browse: objects_returned, prefixes_fan\n[…]\nafter the 200 headers are sent and\ncan't fold into the request entry; it gets a standalone ObjectStreamMetrics\nentry armed on the byte stream (emitted on stream end) with the same\noperation dimension.",
          "is_bot": false,
          "headline": "viewer: Minimal metrique metrics (#598)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-05T18:08:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33df2dd3f71332c779130946a0e18d5eb08af4bc",
          "body": "…emely long URLs (#589)\n\n* fix(viewer): carry large S3 selections as a stateless scope to dodge the 414\n\nOpening the viewer or flamegraph from the S3 browser emitted one\n`trace=/api/object?bucket=&key=` component per selected file and carried the\nwhole list in the navigation URL. A large heatmap sel\n[…]\nvice wins\" which silently dropped the others.\n\nNet -120 lines. Tests: test_trace_scope.js gains encodeAggregationParams cases\nand absorbs the parseKey-layout fixtures; all UI tests + cargo check pass.",
          "is_bot": false,
          "headline": "fix(viewer): carry large S3 selections via a time range to avoid extr…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-05T17:59:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c0652aeb5a7bc019d0ea235b8e4009efbb52b767",
          "body": "…#611)\n\ns3s 0.13 pinned quick-xml 0.37.5, which is flagged by a RUSTSEC advisory\nfailing CI. s3s/s3s-fs/s3s-aws 0.14.1 move to quick-xml 0.41.0.",
          "is_bot": false,
          "headline": "chore(deps): bump s3s crates to 0.14.1 to pull in patched quick-xml (…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-05T17:46:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84a21e5166484f6b9af76de670749d6819d180c2",
          "body": "…param) (#607)\n\nA bring-your-own-credentials request builds an ephemeral S3 client pinned to\nthe region carried on the request (defaulting to us-east-1). When the target\nbucket lived in another region and no region had been detected — e.g. a bucket\ntyped manually rather than picked, so /api/credenti\n[…]\n\n  not just names containing \"dial9\" (some deployments don't name buckets that\n  way).\n\nTests: Rust regression for PermanentRedirect→WrongRegion classification; JS\nurl_state round-trip for aws_region.",
          "is_bot": false,
          "headline": "fix(viewer): handle cross-region S3 buckets (region as a first-class …",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-02T18:04:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "679ee8f29fd5546321d110cd94482736b475e6f2",
          "body": "Fixes unsoundness in `Error::downcast_mut()` (fixed in anyhow 1.0.101).\n\nCloses #590",
          "is_bot": false,
          "headline": "chore(deps): bump anyhow to 1.0.103 to clear RUSTSEC-2026-0190 (#604)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-01T23:32:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a89e0cc9e347776fd6a0fab5a1a56714ffea4579",
          "body": "* feat(viewer): assume a caller-named role as an alternative to BYOC\n\nAdd a server-side assume-role path alongside bring-your-own-credentials. A\nrequest authenticates one of two ways, never both:\n\n  1. BYOC (existing): x-dial9-aws-{access-key-id,secret-access-key,\n     session-token} — the backend s\n[…]\ne_cred_inputs) and a\n    misleading trait doc comment (region pins the STS endpoint + result region,\n    not \"the STS call is global\").\n\ncargo test (72 unit + 49 integration) / clippy / fmt all green.",
          "is_bot": false,
          "headline": "Allow the viewer to assume roles when accessing buckets (#597)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-01T23:05:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "86270d901b7e2daaf2e6ff0eb66580fbcb1c603c",
          "body": null,
          "is_bot": false,
          "headline": "Group by runtime in the UI (#596)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-01T20:49:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "959133dc73bf48eb58e1962265363e8b9c570d4f",
          "body": null,
          "is_bot": false,
          "headline": "attempt to fix gh actions (#606)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-01T20:25:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0a97e16e13ccfcdc14b71a88ade6db28ae8ae61",
          "body": "…e (#595) (#600)\n\nLoading multiple traces concurrently rendered much slower than one\ncontiguous trace, with doubled UI paints. Two causes:\n\n1. The whole-buffer parser (parseTraceBuffer, used by the multi-trace\n   concat path) yielded a macrotask — clamped to ~4ms AND forcing a\n   repaint — every 100\n[…]\nregistered in\ne2e-trace-tests.sh); fetchTracesStream concat-parity / order /\nconcurrent-dispatch / late-failure-no-unhandled-rejection cases in\ntest_fetch_traces.js; test_heatmap.js assertion updated.",
          "is_bot": false,
          "headline": "fix(viewer): pipeline multi-trace loads and unify parse paint throttl…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-07-01T20:06:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac138234d8126cc97191f3898f3f29c93547cb88",
          "body": "* refactor: move memory profiling to dial9-perf-self-profile\n\nMove the whole memory_profiling module (allocator hook + consolidator Source) and its wire events out of dial9-tokio-telemetry into dial9-perf-self-profile, behind a new `memory-source` feature.\n\n* refactor!: make memory profiling standal\n[…]\nrmat\n\n* fix: clippy and shuttle build after the install_into change\n\n* docs: add memory-local example for dial9 + memory profiling\n\n* refactor: depend on dial9-core, drop the duplicated profiler utils",
          "is_bot": false,
          "headline": "refactor: move memory profiling to dial9-perf-self-profile (#591)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-06-30T20:56:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2df3285a8268e7e594d372bd6182a750a7337dbc",
          "body": "…rdering (#586)\n\nTwo bugs found in code review:\n\n1. browse fan-out used buffer_unordered, which yields results in completion\n   order. The overflow-collection loop indexes prefixes[i] by enumeration\n   position, so a result completing out of order was attributed to the wrong\n   prefix: the overflowe\n[…]\negression tests for both: a deterministic out-of-order\ncompletion test (gated via a oneshot, verified to fail under buffer_unordered)\nand a traversal-rejection test asserting no escape dir is created.",
          "is_bot": false,
          "headline": "fix(viewer): correct browse overflow attribution and path-traversal o…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-30T16:15:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea899f4a90184e05557510ddda2bd575e0072135",
          "body": null,
          "is_bot": false,
          "headline": "fix(viewer): prevent XSS in Tokio stats (#587)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-30T15:31:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3e123c84e3a3dbe73a04bb696e271594fe047e0",
          "body": "* refactor: move create_wake_event off SharedState\n\n* refactor: move clock helpers into dial9-core\n\n* refactor: move bus-owned events into dial9-core\n\n* refactor: move CentralCollector and Batch into dial9-core\n\nFirst piece of the event bus machinery. CentralCollector is internal\nplumbing (#[doc(hid\n[…]\nean up\n\n* refactor(core): encapsulate SharedState fields behind accessors\n\n* ci: extend nightly-build gate\n\n* refactor: rename dial9-s3 crate to dial9-utils\n\n* fix clippy warning\n\n* fix clippy warning",
          "is_bot": false,
          "headline": "refactor: move event bus to dial9-core (#549)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-06-29T22:01:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5847e6f0711f2a8299bf5087ac99bb8ec22ae35f",
          "body": "The trace-browser landing page now mirrors its full state into the query\nstring so a search is shareable and survives reload. State is restored on\nload and re-synced on every state-changing action via history.replaceState.\n\nTracked params: bucket, prefix, tab (browse/raw), tz (utc/local), the\nraw-se\n[…]\nand last wins.\n\nSerialize/parse logic lives in a dependency-free url_state.js module (mirrors\nprefix_detect.js/creds.js), unit-tested in test_url_state.js and registered\nin scripts/e2e-trace-tests.sh.",
          "is_bot": false,
          "headline": "Sync landing-page state to the URL (#585)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-29T18:32:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ede024fc81e64d28cb13b630b72308a928a9757a",
          "body": "* deprecate CpuSampleEvent::worker_id; remove assertion on deprecated field\n\n* flamegraph aggregation wip\n\n* properly serve facets to the flamegarph viewer\n\n* add generic facet system\n\n* lots more fixups\n\n* viewer: clean up aggregator CR — fix bugs, drop dead code, minimize API, sync docs to reality\n[…]\nhe aggregate_test suite goes from minutes (folded_outside_cap\n~70s, refinement_climbs ~63s, fetch_more ~49s) to ~0.8s total. parser_parity\nstill covers Rust<->JS decoder parity on the real demo trace.",
          "is_bot": false,
          "headline": "Add Flamegraph / Tokio Stats Aggregation to dial9-viewer (#570)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-27T21:36:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "97cc9fa1cd911d3c2c9cf0ab86117635e6b974cf",
          "body": "* fix: Avoid truncation when rendering the s3 browser view\n\n* Cleanup unused /api/search and /api/browse\n\n* More cleanups\n\n* load 1h at a time instead",
          "is_bot": false,
          "headline": "fix: Avoid truncation when rendering the s3 browser view (#582)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-27T19:53:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "544afd2534e58319890613c4eb02537dc65de422",
          "body": "* perf(telemetry): skip segment metadata work on idle flush cycles\n\n* fixup! perf(telemetry): skip segment metadata work on idle flush cycles\n\n* test(telemetry): make attached-runtime metadata test deterministic\n\n* test(telemetry): guard segment_metadata zero-alloc invariant\n\n* refactor(telemetry): drop redundant segment_metadata bool",
          "is_bot": false,
          "headline": "perf(telemetry): skip segment metadata work on idle flush cycles (#581)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-06-27T19:53:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27fcb892984648af1046410a322d34fc56231b17",
          "body": "A segment that lands in {trace_dir}/{boot_id}/ locally was uploaded to\nS3 under a different, independently-generated boot_id, so you couldn't\ncorrelate a local trace file with its upload.\n\nNow the runtime injects the namespace boot_id into the S3 config (and\nthe embedded segment metadata) at build t\n[…]\n when S3Config is\nused outside the managed Dial9Config path.\n\nAdds an integration test that decodes a sealed segment and asserts its\nboot_id metadata matches the namespace directory name.\n\nCloses #548",
          "is_bot": false,
          "headline": "feat!: unify S3 boot_id with the on-disk namespace boot_id (#566)",
          "author_name": "Shreyas Kanjalkar",
          "author_login": "skanjalkar",
          "committed_at": "2026-06-25T20:46:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d0768b6df5d5fedd409c8e1d8e6d458995338812",
          "body": "…ples (#580)",
          "is_bot": false,
          "headline": "Optimize queue rendering when there are large quantities of queue sam…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-25T14:28:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f257f195525dfae1cc3f282893721cbc95a8874",
          "body": "* cpu usage viewer\n\n* remove noisy data from cpu usage viewer\n\n* rate limit segment metadata warn\n\n* regenerate demo trace\n\n* fix parseTrace skill\n\n* remove visible intervals from cpu panel\n\n* foldable panels\n\n* change fold triangle char and size\n\n* persistent fold state\n\n* remove cpu usage range crosshairs\n\n* guard queue chart from dragging when folded\n\n* localStorage fallback",
          "is_bot": false,
          "headline": "feat: Add CPU usage visualization to the viewer (#564)",
          "author_name": "Franco Profeti",
          "author_login": "noxware",
          "committed_at": "2026-06-24T19:46:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0de05bbe5097c4fab7a02d4cbf0afc642ed93eaf",
          "body": "…#578)\n\n* feat(viewer): export flamegraph as interactive SVG or folded stacks\n\nAdds an \"Export\" control to the flamegraph toolbar that turns the rendered\ntree into two portable artifacts:\n\n- Interactive SVG: a standalone, self-contained flame graph (hover, click-to-\n  zoom, Ctrl-F regex search, URL \n[…]\nSES at the repo root with the FlameGraph attribution\n  and the full verbatim CDDL-1.0 text.\n\n---------\n\nCo-authored-by: Prabhat Jain <pjainp@amazon.com>\nCo-authored-by: Russell Cohen <rcoh@amazon.com>",
          "is_bot": false,
          "headline": "feat(viewer): export flamegraph as interactive SVG or folded stacks (…",
          "author_name": "Prabhat Jain",
          "author_login": "prabrat",
          "committed_at": "2026-06-24T15:35:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fe1b12c0399f791f39ebbaf41211c52cd1d07a4f",
          "body": "…ing UX) (#568)\n\n* viewer: stream trace decode so download and parse overlap\n\nFor a single large trace, the viewer downloaded the whole file (~7s for\n~50MB) and then parsed it (~7s) sequentially. This decodes chunks as they\nstream in from the network, hiding most of the parse time behind the\ndownloa\n[…]\nompressionStream path is\nunchanged; we just lose the download/parse overlap for that response.\n\nAdds a regression test (gzipped + raw) that fails on the old code with\n'Cannot read properties of null'.",
          "is_bot": false,
          "headline": "viewer: overlap trace download and parse (streaming decode + load-tim…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-24T14:46:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efe46aa0236e0e960d278b2cbe785306531d21d1",
          "body": "…#569)\n\n* viewer: add pixel-LOD render helpers to trace_analysis (pure + tested)\n\nPure, unit-tested helpers used by the upcoming canvas-render rewiring. No\nbehavior change on their own — they're not wired into the viewer yet.\n\n- makeBarCoalescer({push, flush}): collapse adjacent same-color pixel-spa\n[…]\nd) passes. The active/park lanes keep longest-wins: their\ncolors are categorical, not a duration ramp. The selected-task highlight\npass keeps Infinity weight (single solid color, no red-bias concern).",
          "is_bot": false,
          "headline": "viewer: pixel-LOD canvas rendering + recycled span-id highlight fix (…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-24T13:16:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6b5db0618f0c05ccfef89d49e0b468de6995bf31",
          "body": "…de buffering) (#567)\n\n* viewer: download trace files in parallel, stop decompressing server-side\n\nThe viewer linked to a single /api/trace?keys=a&keys=b URL, which forced\nthe backend to fetch every file, gunzip each one server-side, concatenate\nthem, and ship one large uncompressed blob. That trans\n[…]\nrageBackend implementors may receive, so adding a field\nlater (e.g. content_type) must not be a breaking change. It's only\nconstructed inside this crate, where struct-literal construction still works.",
          "is_bot": false,
          "headline": "viewer: stream trace objects from S3 (parallel download, no server-si…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-24T12:03:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2cc2928fe740cd6940a842eea25d16f9f145a6a",
          "body": "* fix clock_monotonic_ns fallback\n\n* better clock_monotonic_ns in macos\n\n* improve doc comments\n\n* better unix and darwin handling\n\n* consistent clock_realtime_ns using CLOCK_REALTIME also in darwin\n\n* fix agents.md clippy instruction",
          "is_bot": false,
          "headline": "Improve event timestamps in MacOS & fallback (#573)",
          "author_name": "Franco Profeti",
          "author_login": "noxware",
          "committed_at": "2026-06-24T12:02:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "807a040f8aec7305f7b43329362c291aeba549c3",
          "body": "* feat(dump): add dump control types and trigger channel\n\nGroundwork for on-trigger pipeline runs: DumpId (ULID), DumpControl, DumpRun (dispatch on await or drop, exactly once), DumpReceipt, and DumpError. Not yet wired into the builder or worker; segments still process continuously.\n\n* feat(builder\n[…]\nseal race\n\n* test(dump): deflake remaining seal-race dump tests\n\n* test(dump): deflake lookforward dump tests via stable signals\n\n* test(dump): unify dump-test helpers, re-drive workload while polling",
          "is_bot": false,
          "headline": "feat: Manual trigger for pipeline (#536)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-06-24T10:35:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95e0eb9d4ed78108e12d064a11c3227df1925b07",
          "body": "* configure memory profiling from dial9config\n\n* clean tests a bit\n\n* address clippy",
          "is_bot": false,
          "headline": "feat: memory profiling in `Dial9Config::from_env` (#558)",
          "author_name": "Franco Profeti",
          "author_login": "noxware",
          "committed_at": "2026-06-23T11:15:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3f03019b296936401add6cc0030e61955844c0d",
          "body": "… (#563)",
          "is_bot": false,
          "headline": "refactor(tracing-layer)!: rename Dial9TokioLayer to Dial9TracingLayer…",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-06-23T00:24:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8f51b2b7ff1a6cc6e0972aa7bc79eda0cfe24f5",
          "body": null,
          "is_bot": false,
          "headline": "test(tracing-layer): make multi-worker assertion deterministic (#560)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-06-22T18:48:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb382b8e810a61c8ff89584759aa6655a0549f5a",
          "body": null,
          "is_bot": false,
          "headline": "fix(viewer): scope enclosing spans to event's worker (#559)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-06-22T18:47:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8513899ad76eaf3ded9d3987ac4fb98fe66e74f",
          "body": "* Add POST route to upload then serve a trace\n\n* Add missing upload.rs module file\n\nThe previous commit (cda260b) referenced `mod upload;` and `upload::*`\nin server/mod.rs but never tracked the module file itself, so CI failed\nto build with E0583 (file not found for module `upload`). Add the file.",
          "is_bot": false,
          "headline": "Add POST route to upload then serve a trace (#553)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-22T15:06:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b69bc70bed7e3d293156c658cf1e1cbbba82829e",
          "body": "* bring-your-own-creds\n\n* fix(viewer): paginate S3 list operations\n\nlist_prefixes issued a single ListObjectsV2 with a delimiter and read\ncommon_prefixes() once. Common prefixes count against the per-response\nMaxKeys (default 1000), so a bucket with more than one page of immediate\nchild prefixes sil\n[…]\nentials\n  for naming consistency with allow_byo_creds\n- document why /api/credentials/check is POST, why temp.region is safe to\n  fall back to, and why a failed check does not clear stored credentials",
          "is_bot": false,
          "headline": "Add support for bring-your-own-credentials (#556)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-19T20:20:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b0e67383e4c20e8b9a650e24e9dec781bf844335",
          "body": "* detect when buckets don't have a set prefix\n\n* fix(viewer): address PR #526 feedback\n\n- Extract isDateLayer/lastSegment into pure prefix_detect.js module\n  (loaded by index.html via <script src>, required by the test) so the\n  test no longer regex-extracts source out of index.html.\n- Guard the date-layer reset with !serverHasPrefix so a server-supplied\n  default_prefix is never silently emptied.\n- Wire test_prefix_detection.js into scripts/e2e-trace-tests.sh so it\n  runs in CI.",
          "is_bot": false,
          "headline": "Fix: detect buckets with no prefix (date partitions at root) (#526)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-19T18:25:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a84fdc7d678207c6e18d2504eb470c778c31bd05",
          "body": "* feat(viewer): make custom events clickable to inspect\n\n* feat(viewer): make custom events clickable and task-aware\n\n* fix(viewer): clamp tooltip to viewport bottom edge\n\n* feat(viewer): pin clicked event detail in sidebar\n\n* feat(viewer): make custom events clickable and traceable\n\n* fix(viewer): \n[…]\n keep legend bars above the selected-event marker\n\n* feat(viewer): enhance the event Related tab\n\n* feat(viewer): open the event detail sidebar at 350px\n\n* refactor(viewer): dedup event-detail helpers",
          "is_bot": false,
          "headline": "feat(viewer): Make custom events clickable to inspect (#552)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-06-19T17:54:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "462e09711f6c9bbfef950077a82c9f1babf041d4",
          "body": "* relax agents md\n\n* tiny relaxing of some small conditions\n\n* link agents.md from claude.md\n\n* mention viewer skills discovery in agents.md\n\n* unmention tdd while still requiring test coverage",
          "is_bot": false,
          "headline": "docs(agents): relax workflow-specific instructions (#551)",
          "author_name": "Franco Profeti",
          "author_login": "noxware",
          "committed_at": "2026-06-18T12:04:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d90ad6039f4ee7ea8acdd7f343a1c523bfa3d7cc",
          "body": "The trace= query parameter is now repeatable in the trace viewer and\nflamegraph. Each value is fetched independently and may be individually\ngzipped (unlike /api/trace, which gunzips server-side before serving a\nsingle response), so each component is ungzipped on its own before the\nraw bytes are con\n[…]\ns.\n- e2e-trace-tests.sh: run the new test in CI.\n- AGENTS.md + dial9-viewer/ui/README.md: document that new test_*.js files\n  must be registered in e2e-trace-tests.sh (CI does not auto-discover them).",
          "is_bot": false,
          "headline": "Make trace= viewer param repeatable, ungzipping each component (#546)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-17T13:24:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4116de55205c12f354107c04841638535a7a8c3a",
          "body": "* refactor: scaffold dial9-core, move shared leaf utils\n\n* docs: hide dial9-core internal plumbing from rustdoc\n\n* ci: include dial9-core in cargo package verification",
          "is_bot": false,
          "headline": "refactor: setup dial9-core (#540)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-06-17T10:40:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dac69e73cceb36c43b27114835913d85c623a6d4",
          "body": "…(#534)\n\n* feat: per-process boot_id namespace isolation for shared trace directories\n\nWhen multiple processes share the same trace directory, each process's\nbackground worker loads and processes all peers' files, causing\nmemory/CPU/disk runaway. Fix by namespacing trace segments into\nper-process su\n[…]\nBackProcessor gained a `dir` field but three test sites still used\nthe unit-struct construction syntax, breaking the lib test build (E0423).\n\n---------\n\nCo-authored-by: Russell Cohen <rcoh@amazon.com>",
          "is_bot": false,
          "headline": "Per-process boot_id namespace isolation for shared trace directories …",
          "author_name": "Shreyas Kanjalkar",
          "author_login": "skanjalkar",
          "committed_at": "2026-06-17T01:05:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "549e0d3a0708d293e18110e1f878229b47154e6f",
          "body": "* feat(viewer): density heatmap timeline + region select for S3 browser\n\nReplace the per-host card grid in the S3 browser with a density timeline\nheatmap: one row per service/host, x-axis = time, color = data density\n(each segment's bytes spread uniformly over its [start, last_modified]\nspan, normal\n[…]\n 'no data' stays\n  visually distinct from low-but-present density.\n- Adds 7 unit tests (clamp, realEnd preservation, gap detection,\n  no-clamp-across-real-gaps, unsorted input, seam-no-longer-spikes).",
          "is_bot": false,
          "headline": "improve s3 browser (#528)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-16T20:10:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1a47a82a0a33679a9942e6a8df7334f325dca57",
          "body": "* refactor: drop thread_roles from FlushContext / Source\n\n* refactor: derive worker attribution at analysis, drop thread_roles",
          "is_bot": false,
          "headline": "refactor: drop thread_roles from FlushContext / Source (#539)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-06-16T19:01:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3810bffefa55f7939b26ba4a90ce3b6cf7e34a5",
          "body": "…t test (#543)\n\n* Fix flaky capture_produces_frames: isolate SIGSEGV-handler-replacement test\n\n`capture_debug_asserts_when_handler_replaced` replaced the *process-wide*\nSIGSEGV handler with SIG_IGN to verify `Unwinder::capture`'s `debug_assert!`\nfires. Its comment assumed nextest's process-per-test \n[…]\n.\n\nAlso reverts the leniency from the previous commit: the test now\nhard-asserts frame 0 == helper again, which is correct given that all\njobs that exercise the unwinder now build with frame pointers.",
          "is_bot": false,
          "headline": "Fix flaky capture_produces_frames: isolate SIGSEGV-handler-replacemen…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-16T18:27:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "abfbcf4b99a9012fef244fa108e506364527ddac",
          "body": "The test rebuilt the producer-side liveset by replaying the event stream in\norder, keying a HashMap on addr alone and insert/remove-ing as it went. That\nassumes the trace stream is strictly timestamp-ordered and that an address is\nnever reused before its FreeEvent appears. Neither holds:\n\n  - Memory\n[…]\n. The\nFreeEvent denormalizes both fields from the same liveset entry the matching\non_alloc inserted, so this is order-independent and address-reuse safe.\n\nVerified: 10/40 failures before, 0/100 after.",
          "is_bot": false,
          "headline": "test: fix flaky hook_realloc_emits_alloc_and_free_when_liveset_on (#545)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-16T18:26:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed41cd35eb6d261f94bc7251d471353b22f0ac6d",
          "body": "* initial socket accept queues impl\n\n* better feature handling of socket accept queues\n\n* from_env support for socket accept queues\n\n* socket recv full\n\n* metrics-service update for demo trace\n\n* delegate socket accept queues default handling\n\n* cached inode & cookie to avoid fd scan\n\n* document per\n[…]\nueEvent` rename\n\n* address clippy unnecessary try_into\n\n* js fixes\n\n* js cleanup\n\n* reflect js changes in `dial9-trace-loading` skill\n\n* flamegraph recipe 5: find sampled poll\n\n* regenerate demo trace",
          "is_bot": false,
          "headline": "feat: socket accept queues source (#506)",
          "author_name": "Franco Profeti",
          "author_login": "noxware",
          "committed_at": "2026-06-16T17:04:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "858f5727960c6b64c7aa3933ebe82f8530ca2350",
          "body": "* refactor!: collapse handles into Dial9Handle / Dial9TokioHandle\n\n* fix Dial9TokioHandle mention, add entries to CHANGELOG",
          "is_bot": false,
          "headline": "refactor!: collapse handles into Dial9Handle / Dial9TokioHandle (#535)",
          "author_name": "Julián Montes de Oca",
          "author_login": "yulnr",
          "committed_at": "2026-06-16T09:30:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23ea29ab321330f153cfe3f7b91ab95a8ebc2e1e",
          "body": "* refactor(config)!: remove legacy positional config API\n\n* refactor(config): remove references",
          "is_bot": false,
          "headline": "Refactor(config): Remove legacy positional config (#538)",
          "author_name": "Facundo Luzko",
          "author_login": "Fluzko",
          "committed_at": "2026-06-16T00:52:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d73104a3d984bfc8621ef72b1b3b7d0441ef5f1a",
          "body": "…st (#524)",
          "is_bot": false,
          "headline": "tests: Allow for out-of-order tasks and add trace integrity stress te…",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-15T19:16:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e781a67a632d8ad60a5051e2632078a36c37699",
          "body": null,
          "is_bot": false,
          "headline": "feat: dial9::main now enables graceful_shutdown (#527)",
          "author_name": "Russell Cohen",
          "author_login": "rcoh",
          "committed_at": "2026-06-15T18:54:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 85,
      "commits_last_year": 407,
      "latest_release_at": "2026-07-24T14:51:41Z",
      "latest_release_tag": "dial9-v0.5.0-rc1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 22,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 0.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "dial9",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "telemetry",
            "profiling",
            "tokio",
            "tracing",
            "asynchronous",
            "development-tools::profiling"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/dial9",
          "is_deprecated": false,
          "latest_version": "0.3.13",
          "repository_url": "https://github.com/dial9-rs/dial9",
          "versions_count": 9,
          "total_downloads": 463,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 154,
          "first_published_at": "2026-05-08T03:04:25.398120Z",
          "latest_published_at": "2026-07-24T14:51:35.603801Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "dial9-core",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/dial9-core",
          "is_deprecated": false,
          "latest_version": "0.5.0-rc0",
          "repository_url": "https://github.com/dial9-rs/dial9",
          "versions_count": 1,
          "total_downloads": 34,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 11,
          "first_published_at": "2026-07-23T21:09:54.887686Z",
          "latest_published_at": "2026-07-23T21:09:54.887686Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "dial9-macro",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/dial9-macro",
          "is_deprecated": false,
          "latest_version": "0.3.7",
          "repository_url": "https://github.com/dial9-rs/dial9",
          "versions_count": 9,
          "total_downloads": 172322,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 56790,
          "first_published_at": "2026-04-18T01:16:12.771522Z",
          "latest_published_at": "2026-07-23T21:21:32.092778Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "dial9-utils",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/dial9-utils",
          "is_deprecated": false,
          "latest_version": "0.5.0-rc0",
          "repository_url": "https://github.com/dial9-rs/dial9",
          "versions_count": 1,
          "total_downloads": 18,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 6,
          "first_published_at": "2026-07-23T21:10:44.248259Z",
          "latest_published_at": "2026-07-23T21:10:44.248259Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "dial9-viewer",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/dial9-viewer",
          "is_deprecated": false,
          "latest_version": "0.3.13",
          "repository_url": "https://github.com/dial9-rs/dial9",
          "versions_count": 17,
          "total_downloads": 1565,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 493,
          "first_published_at": "2026-04-10T23:52:58.317817Z",
          "latest_published_at": "2026-07-24T14:51:10.320978Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "dial9-perf-self-profile",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/dial9-perf-self-profile",
          "is_deprecated": false,
          "latest_version": "0.4.3",
          "repository_url": "https://github.com/dial9-rs/dial9",
          "versions_count": 15,
          "total_downloads": 97345,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 31944,
          "first_published_at": "2026-03-01T17:40:29.412940Z",
          "latest_published_at": "2026-07-23T21:21:05.456374Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "dial9-trace-format",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/dial9-trace-format",
          "is_deprecated": false,
          "latest_version": "0.4.1",
          "repository_url": "https://github.com/dial9-rs/dial9",
          "versions_count": 11,
          "total_downloads": 205319,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 61418,
          "first_published_at": "2026-03-20T14:44:01.276195Z",
          "latest_published_at": "2026-07-23T20:59:01.642446Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "dial9-tokio-telemetry",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "telemetry",
            "profiling",
            "tokio",
            "tracing",
            "symposium",
            "asynchronous",
            "development-tools::profiling"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/dial9-tokio-telemetry",
          "is_deprecated": false,
          "latest_version": "0.3.15",
          "repository_url": "https://github.com/dial9-rs/dial9",
          "versions_count": 21,
          "total_downloads": 206893,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 61375,
          "first_published_at": "2026-03-01T17:41:50.075389Z",
          "latest_published_at": "2026-07-23T21:21:22.777710Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 38,
      "stars": 418,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2026-03-06",
            "count": 2
          },
          {
            "date": "2026-03-16",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 4
          },
          {
            "date": "2026-03-24",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 1
          },
          {
            "date": "2026-03-29",
            "count": 1
          },
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 1
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-22",
            "count": 1
          },
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-04-27",
            "count": 1
          },
          {
            "date": "2026-04-28",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 1
          },
          {
            "date": "2026-05-11",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-06-04",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 1
          },
          {
            "date": "2026-06-10",
            "count": 2
          },
          {
            "date": "2026-06-11",
            "count": 1
          },
          {
            "date": "2026-06-14",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-16",
            "count": 1
          },
          {
            "date": "2026-07-17",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 37,
        "total_forks": 38
      },
      "star_history": null,
      "open_issues_and_prs": 107
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "dial9-viewer/ui/tsconfig.json"
      ],
      "toolchain_manifests": [
        "Cargo.toml",
        "dial9-core/Cargo.toml",
        "dial9-macro/Cargo.toml",
        "dial9-tokio-telemetry/Cargo.toml",
        "dial9-trace-format-derive/Cargo.toml",
        "dial9-trace-format/Cargo.toml",
        "dial9-trace-format/fuzz/Cargo.toml",
        "dial9-utils/Cargo.toml",
        "dial9-viewer/Cargo.toml",
        "dial9/Cargo.toml",
        "examples/memory-local/Cargo.toml",
        "examples/metrics-service/Cargo.toml",
        "examples/simple-local/Cargo.toml",
        "perf-self-profile/Cargo.toml"
      ],
      "largest_source_bytes": 286549,
      "source_files_sampled": 685,
      "oversized_source_files": 14,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 8011
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "dial9-core/Cargo.toml",
        "dial9-macro/Cargo.toml",
        "dial9-tokio-telemetry/Cargo.toml",
        "dial9-trace-format-derive/Cargo.toml",
        "dial9-trace-format/Cargo.toml",
        "dial9-utils/Cargo.toml",
        "dial9-viewer/Cargo.toml",
        "dial9/Cargo.toml",
        "perf-self-profile/Cargo.toml"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates"
      ],
      "dependencies": [
        {
          "name": "bon",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "bytes",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "crossbeam-queue",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "ulid",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "dial9-trace-format",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "libc",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tokio",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tokio-util",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "futures-util",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "flate2",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "metrique",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.23"
        },
        {
          "name": "metrique-timesource",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "shuttle",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9.1"
        },
        {
          "name": "tracing",
          "manifest": "dial9-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.44"
        },
        {
          "name": "syn",
          "manifest": "dial9-macro/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "quote",
          "manifest": "dial9-macro/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "proc-macro2",
          "manifest": "dial9-macro/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tokio",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.52.0"
        },
        {
          "name": "tokio-util",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "arc-swap",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "libc",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "futures-util",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "pin-project-lite",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "serde",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "smallvec",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "bytes",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "dial9-perf-self-profile",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dial9-trace-format",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.44"
        },
        {
          "name": "tracing-subscriber",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "hostname",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "bon",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "aws-sdk-s3",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "aws-config",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "flate2",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "time",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "metrique",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.23"
        },
        {
          "name": "metrique-timesource",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "shuttle",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9.1"
        },
        {
          "name": "dial9-core",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dial9-utils",
          "manifest": "dial9-tokio-telemetry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "syn",
          "manifest": "dial9-trace-format-derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "quote",
          "manifest": "dial9-trace-format-derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "proc-macro2",
          "manifest": "dial9-trace-format-derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "dial9-trace-format-derive",
          "manifest": "dial9-trace-format/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "dial9-trace-format/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "dial9-core",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bon",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "tokio",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tracing",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.44"
        },
        {
          "name": "aws-sdk-s3",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "aws-config",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "time",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "hostname",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "serde",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "dial9-utils/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "axum",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "axum-extra",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "bytes",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "clap",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "4"
        },
        {
          "name": "flate2",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "futures",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "serde",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tokio",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "rust-embed",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "8"
        },
        {
          "name": "mime_guess",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tower-http",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.6"
        },
        {
          "name": "uuid",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "form_urlencoded",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tracing",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "tracing-subscriber",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "metrique",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.23"
        },
        {
          "name": "metrique-writer",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "time",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "aws-config",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "aws-sdk-s3",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "anyhow",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "bon",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "s3s",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14.1"
        },
        {
          "name": "s3s-fs",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14.1"
        },
        {
          "name": "s3s-aws",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14.1"
        },
        {
          "name": "tempfile",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "dial9-trace-format",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "arrow",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "54"
        },
        {
          "name": "parquet",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "54"
        },
        {
          "name": "blake3",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "lasso",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "rustc-hash",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "dial9-core",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hex",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "urlencoding",
          "manifest": "dial9-viewer/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "dial9-core",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dial9-perf-self-profile",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dial9-tokio-telemetry",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.5.0-rc0"
        },
        {
          "name": "dial9-macro",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dial9-viewer",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.5.0-rc1"
        },
        {
          "name": "anyhow",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tokio",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.52.0"
        },
        {
          "name": "bon",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "tracing",
          "manifest": "dial9/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.44"
        },
        {
          "name": "bon",
          "manifest": "perf-self-profile/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "bytes",
          "manifest": "perf-self-profile/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "crossbeam-queue",
          "manifest": "perf-self-profile/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "dial9-core",
          "manifest": "perf-self-profile/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dial9-trace-format",
          "manifest": "perf-self-profile/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "scc",
          "manifest": "perf-self-profile/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tokio",
          "manifest": "perf-self-profile/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tracing",
          "manifest": "perf-self-profile/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.44"
        }
      ],
      "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": 10,
        "merged_prs": 414,
        "open_issues": 97,
        "closed_ratio": 0.599,
        "closed_issues": 145,
        "closed_unmerged_prs": 46
      },
      "bus_factor": 1,
      "bot_contributors": 3,
      "top_contributors": [
        {
          "type": "User",
          "login": "rcoh",
          "commits": 236,
          "avatar_url": "https://avatars.githubusercontent.com/u/492903?v=4"
        },
        {
          "type": "User",
          "login": "jlizen",
          "commits": 52,
          "avatar_url": "https://avatars.githubusercontent.com/u/44884346?v=4"
        },
        {
          "type": "User",
          "login": "yulnr",
          "commits": 30,
          "avatar_url": "https://avatars.githubusercontent.com/u/22042418?v=4"
        },
        {
          "type": "User",
          "login": "Fluzko",
          "commits": 29,
          "avatar_url": "https://avatars.githubusercontent.com/u/37568902?v=4"
        },
        {
          "type": "User",
          "login": "noxware",
          "commits": 10,
          "avatar_url": "https://avatars.githubusercontent.com/u/7684329?v=4"
        },
        {
          "type": "User",
          "login": "fmzbl",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/66457708?v=4"
        },
        {
          "type": "User",
          "login": "zz85",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/314997?v=4"
        },
        {
          "type": "User",
          "login": "jasgin",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/67525213?v=4"
        },
        {
          "type": "User",
          "login": "nickrobinson",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/479287?v=4"
        },
        {
          "type": "User",
          "login": "prabrat",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/67966492?v=4"
        }
      ],
      "contributors_sampled": 27,
      "top_contributor_share": 0.587
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "audit.yml",
        "benchmarks-pr.yml",
        "benchmarks.yml",
        "ci.yml",
        "release-pr.yml",
        "release.yml",
        "stress-test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: githubv4.Query: non-200 OK status code: 504 Gateway Timeout body: \"{\\\"message\\\": \\\"We couldn't respond to your request in time. Sorry about that. Please try resubmitting your request and contact us if the problem persists.\\\"}\\r\\n\"",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 15 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is 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 2 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": 9,
            "reason": "dependency not pinned by hash detected -- score normalized to 9",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 1,
            "reason": "9 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "755d86393c4bfe4423aa72038c015296bfc3c3db",
        "ran_at": "2026-07-24T16:05:37Z",
        "aggregate_score": 6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T15:02:21Z",
      "oldest_open_prs": [
        {
          "number": 152,
          "created_at": "2026-04-01T13:48:55Z",
          "last_comment_at": "2026-06-01T09:34:03Z",
          "last_comment_author": "yulnr"
        },
        {
          "number": 554,
          "created_at": "2026-06-18T20:24:52Z",
          "last_comment_at": "2026-07-23T14:50:03Z",
          "last_comment_author": "Fluzko"
        },
        {
          "number": 572,
          "created_at": "2026-06-24T00:12:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 667,
          "created_at": "2026-07-14T05:11:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 684,
          "created_at": "2026-07-19T23:54:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 695,
          "created_at": "2026-07-21T15:55:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 696,
          "created_at": "2026-07-21T17:27:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 702,
          "created_at": "2026-07-23T14:02:56Z",
          "last_comment_at": "2026-07-24T15:09:49Z",
          "last_comment_author": "rcoh"
        },
        {
          "number": 713,
          "created_at": "2026-07-24T12:51:13Z",
          "last_comment_at": "2026-07-24T13:21:16Z",
          "last_comment_author": "rcoh"
        },
        {
          "number": 714,
          "created_at": "2026-07-24T13:40:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-24T14:05:52Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 26,
          "created_at": "2026-03-01T13:44:00Z",
          "last_comment_at": "2026-03-10T19:40:54Z",
          "last_comment_author": "jlizen"
        },
        {
          "number": 34,
          "created_at": "2026-03-02T11:36:15Z",
          "last_comment_at": "2026-03-04T21:49:08Z",
          "last_comment_author": "rcoh"
        },
        {
          "number": 50,
          "created_at": "2026-03-04T18:26:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 55,
          "created_at": "2026-03-04T21:47:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 56,
          "created_at": "2026-03-05T12:55:51Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 62,
          "created_at": "2026-03-06T21:16:30Z",
          "last_comment_at": "2026-03-10T01:36:52Z",
          "last_comment_author": "jlizen"
        },
        {
          "number": 67,
          "created_at": "2026-03-09T16:16:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 68,
          "created_at": "2026-03-09T16:59:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 70,
          "created_at": "2026-03-10T00:40:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 71,
          "created_at": "2026-03-11T01:29:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 75,
          "created_at": "2026-03-13T13:24:48Z",
          "last_comment_at": "2026-03-19T12:13:01Z",
          "last_comment_author": "rcoh"
        },
        {
          "number": 82,
          "created_at": "2026-03-16T17:43:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 83,
          "created_at": "2026-03-16T19:13:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 93,
          "created_at": "2026-03-18T00:55:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 130,
          "created_at": "2026-03-23T17:17:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 132,
          "created_at": "2026-03-24T00:02:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 137,
          "created_at": "2026-03-24T16:00:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 138,
          "created_at": "2026-03-26T12:27:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 156,
          "created_at": "2026-04-02T13:27:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 189,
          "created_at": "2026-04-13T16:03:25Z",
          "last_comment_at": "2026-07-07T18:27:32Z",
          "last_comment_author": "jlizen"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/dial9-rs/dial9",
    "host": "github.com",
    "name": "dial9",
    "owner": "dial9-rs"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 69,
      "inputs": {
        "security": 60,
        "vitality": 83,
        "community": 70,
        "governance": 62,
        "engineering": 67
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 83,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "commits_last_year": 407,
              "human_commit_share": 0.99,
              "days_since_last_push": 0,
              "active_weeks_last_year": 22
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "22/52 weeks with commits",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 22
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "407 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 407
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 85,
              "latest_release_tag": "dial9-v0.5.0-rc1",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 0.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "85 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 85
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 70,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "forks": 38,
              "stars": 418,
              "watchers": 3,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "418 stars",
                "points": 42.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 418
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "38 forks",
                "points": 13.1,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 38
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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": "excellent",
            "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": 89,
            "inputs": {
              "packages": [
                "dial9",
                "dial9-core",
                "dial9-macro",
                "dial9-utils",
                "dial9-viewer",
                "dial9-perf-self-profile",
                "dial9-trace-format",
                "dial9-tokio-telemetry"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 683959,
              "monthly_downloads": 212191
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "212,191 downloads/month across crates",
                "points": 71,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 212191,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "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": 62,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 27,
              "top_contributor_share": 0.587
            },
            "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 59% of commits",
                "points": 9.3,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 59
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "27 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 27
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 15 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "merged_prs": 414,
              "open_issues": 97,
              "closed_issues": 145,
              "issue_closed_ratio": 0.599,
              "closed_unmerged_prs": 46
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "60% of issues closed",
                "points": 28,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 60
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "414/460 decided PRs merged",
                "points": 34.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 414,
                      "decided": 460
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 39,
            "inputs": {
              "followers": 3,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "dial9-rs",
              "public_repos": 2,
              "account_age_days": 153
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "3 followers of dial9-rs",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 3,
                      "login": "dial9-rs"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "2 public repos, account ~0 yr old",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 2
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "dial9",
                "dial9-core",
                "dial9-macro",
                "dial9-utils",
                "dial9-viewer",
                "dial9-perf-self-profile",
                "dial9-trace-format",
                "dial9-tokio-telemetry"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "8 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 8,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "21 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 67,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 60,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: githubv4.Query: non-200 OK status code: 504 Gateway Timeout body: \"{\\\"message\\\": \\\"We couldn't respond to your request in time. Sorry about that. Please try resubmitting your request and contact us if the problem persists.\\\"}\\r\\n\"",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 15 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "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 2 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 9",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "9 existing vulnerabilities detected",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 12
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.99,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 8011
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "98 of 99 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 98,
                      "sampled": 99
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "dial9-viewer/ui/tsconfig.json"
              ],
              "agent_commit_share": 0.03,
              "toolchain_manifests": [
                "Cargo.toml",
                "dial9-core/Cargo.toml",
                "dial9-macro/Cargo.toml",
                "dial9-tokio-telemetry/Cargo.toml",
                "dial9-trace-format-derive/Cargo.toml",
                "dial9-trace-format/Cargo.toml",
                "dial9-trace-format/fuzz/Cargo.toml",
                "dial9-utils/Cargo.toml",
                "dial9-viewer/Cargo.toml",
                "dial9/Cargo.toml",
                "examples/memory-local/Cargo.toml",
                "examples/metrics-service/Cargo.toml",
                "examples/simple-local/Cargo.toml",
                "perf-self-profile/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, dial9-core/Cargo.toml, dial9-macro/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, dial9-core/Cargo.toml, dial9-macro/Cargo.toml"
                    }
                  }
                ],
                "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": "dial9-viewer/ui/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "dial9-viewer/ui/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "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": "dependency not pinned by hash detected -- score normalized to 9",
                "points": 9,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 286549,
              "source_files_sampled": 685,
              "oversized_source_files": 14
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "14/685 source files over 60KB",
                "points": 53.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 685,
                      "oversized": 14
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T16:06:21.346592Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/dial9-rs/dial9.svg",
  "full_name": "dial9-rs/dial9",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikencrates.io.