Public record
Software health reportschema 0.27.0 · metrics 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 stars⑂ 38 forkssince Feb 2026View on GitHub ↗

dial9-rs/dial9 holds a health index of 69 out of 100, placing it in the Moderate band. It scores highest on Vitality (83/100) and lowest on Security (60/100). It was last updated today. A single contributor accounts for most of its recent work.

69
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

69
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

dial9-rsOrganization
3 followers2 public repossince Feb 2026

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
crates.iodial90.3.1315490 days agotelemetryprofilingtokiotracingasynchronous
crates.iodial9-core0.5.0-rc01110 days ago
crates.iodial9-macro0.3.756,79090 days ago
crates.iodial9-utils0.5.0-rc0610 days ago
crates.iodial9-viewer0.3.13493170 days ago
crates.iodial9-perf-self-profile0.4.331,944150 days ago
crates.iodial9-trace-format0.4.161,418110 days ago
crates.iodial9-tokio-telemetry0.3.1561,375210 days agotelemetryprofilingtokiotracingsymposiumasynchronous

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

83Good · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
15.2/36Commit cadence — 22/52 weeks with commits
18/18Commit volume — 407 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year407
human_commit_share0.99
days_since_last_push0
active_weeks_last_year22
How it's scored
27/27Ships releases — 85 releases published
36/36Release recency — latest release 0 days ago
27/27Release cadence — a release every ~0.4 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count85
latest_release_tagdial9-v0.5.0-rc1
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases0.4

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

70Good · 18% of overall
How it's scored
42.5/60Stars — 418 stars
13.1/25Forks — 38 forks
1.7/15Watchers — 3 watchers
Inputs used
forks38
stars418
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
How it's scored
71/80Monthly downloads — 212,191 downloads/month across crates
0/20Registry dependents — not reported by this ecosystem
Inputs used
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
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

62Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
9.3/22.5Commit distribution — top contributor authored 59% of commits
13.5/13.5Contributor breadth — 27 contributors
10/10OpenSSF Scorecard: Contributors — project has 15 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled27
top_contributor_share0.587
How it's scored
28/46.8Issue resolution — 60% of issues closed
34.4/38.3PR acceptance — 414/460 decided PRs merged
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Inputs used
merged_prs414
open_issues97
closed_issues145
issue_closed_ratio0.599
closed_unmerged_prs46
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
4.3/25Owner reach — 3 followers of dial9-rs
4.3/25Track record — 2 public repos, account ~0 yr old
Inputs used
followers3
owner_typeOrganization
is_verified
owner_logindial9-rs
public_repos2
account_age_days153
How it's scored
25/25Published & resolvable — 8 package(s) on crates
35/35Publish recency — latest publish 0 days ago
20/20Version history — 21 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesdial9, dial9-core, dial9-macro, dial9-utils, dial9-viewer, dial9-perf-self-profile, dial9-trace-format, dial9-tokio-telemetry
ecosystemscrates
any_deprecatedno
min_days_since_publish0

Engineering Quality

Are baseline engineering and documentation practices in place?

67Moderate · 20% of overall
How it's scored
24/24CI workflows — 7 workflow(s)
24/24Tests present
0/16Linter config
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
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentation

65Moderate
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

60Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — no data
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.5License — 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 — no data
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
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6
Excluded from scoring (no data or not applicable): branch_protection, packaging. Remaining weights renormalized.

AI Readiness

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.

75Good · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md, CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 98 of 99 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.99
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes8,011
How it's scored
12.6/18One-command bootstrap — Cargo.toml, dial9-core/Cargo.toml, dial9-macro/Cargo.toml (toolchain convention, no task runner)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — dial9-viewer/ui/tsconfig.json
10/10Reproducible environment — Dockerfile, lockfile
6/10Demonstrated agent practice — 3 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
9/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
Inputs used
has_nixno
has_testsyes
lockfilesCargo.lock, package-lock.json
has_dockerfileyes
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
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
How it's scored
45/45Type-checkable code — Rust (statically typed)
53.9/55Manageable file sizes — 14/685 source files over 60KB
Inputs used
primary_languageRust
largest_source_bytes286,549
source_files_sampled685
oversized_source_files14
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

418GitHub stars
27contributors
407commits, last 12 months
0days since last push
85releases
1bus factor
97open issues
crates.iopackage ecosystems

Data collection 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

More detail

Star and fork history 0 ★ / 38 ⇿
0Stars
38Forks
72Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

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

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-24 16:05 UTC

10Binary-Artifactsno binaries found in the repo
n/aBranch-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
n/aPackagingpackaging 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
Direct dependencies 110
RegistryPackageVersion constraintManifest
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
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticscrates.io.