Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-26 03:28 UTC

dshakes / firstpass

Route every LLM request to the cheapest model that provably passes your quality gate — with a signed, tamper-evident receipt for every decision. Proof over prediction.

RustApache-2.0★ 2 Sterne⑂ 0 Forksseit Juli 2026Auf GitHub ansehen ↗

dshakes/firstpass erreicht einen Gesundheitsindex von 55 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (81/100) ab, am schwächsten bei Community & Adoption (27/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

55
gesamt / 100
Mittel

Software-Gesundheitsindex

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

55
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

ShakesPersönliches Konto
7 Follower46 öffentliche Reposseit Apr. 2014

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
crates.iofirstpass-core0.2.78215vor 0 Tagenauditllmroutingverificationdata-structures
crates.iofirstpass-proxy0.2.76115vor 0 Tagenaianthropicllmproxyroutingcommand-line-utilities
PyPIfirstpass0.2.7-14vor 0 Tagenllmproxyroutinganthropicai

Metriken nach Kategorie

Vitalität

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

70Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
2.1/36Commit-Rhythmus — 3/52 Wochen mit Commits
18/18Commit-Volumen — 283 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year283
human_commit_share1
days_since_last_push0
active_weeks_last_year3
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 17 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 1 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count17
latest_release_tagv0.2.7
releases_from_tagsnein
days_since_latest_release0
mean_days_between_releases1

Community & Verbreitung

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

27Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 2 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars2
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
28.8/80Downloads pro Monat — 143 Downloads/Monat über crates, pypi
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesfirstpass-core, firstpass-proxy, firstpass
dependents
ecosystemscrates, pypi
total_downloads429
monthly_downloads143
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

54Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
38/38.3PR-Annahme — 155/156 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/25 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs155
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
6.5/25Reichweite des Inhabers — 7 Follower von dshakes
24.2/25Kontohistorie — 46 öffentliche Repos, Kontoalter ca. 12 Jahre
Verwendete Eingangsdaten
followers7
owner_typeUser
is_verified
owner_logindshakes
public_repos46
account_age_days4.469
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 3 Paket(e) auf crates, pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
20/20Versionshistorie — 15 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesfirstpass-core, firstpass-proxy, firstpass
ecosystemscrates, pypi
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

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

Dokumentation

100Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://dshakes.github.io/firstpass
10/10Repository-Beschreibung
10/10Topics — 10 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsagents, ai-agents, cost-optimization, inference, llm, llm-router, observability, proxy, reliability, rust
has_wikija
homepagehttps://dshakes.github.io/firstpass
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

35Gefährdet · 16 % des Gesamtindex

Sicherheitslage

35Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 25 out of 25 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/25 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
2/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
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,5

AI Readiness

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

73Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md
15/15Maschinenlesbare Doku (llms.txt) — llms.txt vorhanden
40/40Lesbare Commit-Historie — 100 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtja
legible_history_share1
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes4.296
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — Cargo.toml, crates/firstpass-bench/Cargo.toml, crates/firstpass-core/Cargo.toml (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Rust (statisch typisiert)
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesCargo.lock
has_dockerfileja
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsCargo.toml, crates/firstpass-bench/Cargo.toml, crates/firstpass-core/Cargo.toml, crates/firstpass-proxy/Cargo.toml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Rust (statisch typisiert)
50.3/55Handhabbare Dateigrößen — 5/58 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRust
largest_source_bytes214.155
source_files_sampled58
oversized_source_files5
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

2GitHub-Sterne
1Mitwirkende
283Commits, letzte 12 Monate
0Tage seit letztem Push
17Releases
1Bus-Faktor
0offene Issues
crates.ioPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'firstpass-bench' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index pypi:firstpass@0.2.7; advisories assessed against the repository dependency graph instead

Weitere Details

OpenSSF Scorecard 3.5 / 10
3.5Gesamtwert

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests25 out of 25 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/25 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 39
RegistryPaketVersionsvorgabeManifest
crates.iofirstpass-corecrates/firstpass-bench/Cargo.toml
crates.ioserdecrates/firstpass-bench/Cargo.toml
crates.ioserde_jsoncrates/firstpass-bench/Cargo.toml
crates.ioreqwestcrates/firstpass-bench/Cargo.toml
crates.ioserdecrates/firstpass-core/Cargo.toml
crates.ioserde_jsoncrates/firstpass-core/Cargo.toml
crates.iotomlcrates/firstpass-core/Cargo.toml
crates.iouuidcrates/firstpass-core/Cargo.toml
crates.iosha2crates/firstpass-core/Cargo.toml
crates.iohexcrates/firstpass-core/Cargo.toml
crates.iojiffcrates/firstpass-core/Cargo.toml
crates.iothiserrorcrates/firstpass-core/Cargo.toml
crates.iofutures-core0.3crates/firstpass-proxy/Cargo.toml
crates.iofirstpass-corecrates/firstpass-proxy/Cargo.toml
crates.ioserdecrates/firstpass-proxy/Cargo.toml
crates.ioserde_jsoncrates/firstpass-proxy/Cargo.toml
crates.iojiffcrates/firstpass-proxy/Cargo.toml
crates.iouuidcrates/firstpass-proxy/Cargo.toml
crates.iothiserrorcrates/firstpass-proxy/Cargo.toml
crates.ioaes-gcmcrates/firstpass-proxy/Cargo.toml
crates.iohexcrates/firstpass-proxy/Cargo.toml
crates.ioargon2crates/firstpass-proxy/Cargo.toml
crates.ioaxumcrates/firstpass-proxy/Cargo.toml
crates.iotokiocrates/firstpass-proxy/Cargo.toml
crates.ioreqwestcrates/firstpass-proxy/Cargo.toml
crates.iorusqlitecrates/firstpass-proxy/Cargo.toml
crates.iotracingcrates/firstpass-proxy/Cargo.toml
crates.iotracing-subscribercrates/firstpass-proxy/Cargo.toml
crates.iobytescrates/firstpass-proxy/Cargo.toml
crates.ioasync-traitcrates/firstpass-proxy/Cargo.toml
crates.iotowercrates/firstpass-proxy/Cargo.toml
crates.iogovernorcrates/firstpass-proxy/Cargo.toml
crates.iometricscrates/firstpass-proxy/Cargo.toml
crates.iometrics-exporter-prometheuscrates/firstpass-proxy/Cargo.toml
crates.ioaws-sigv4crates/firstpass-proxy/Cargo.toml
crates.ioaws-credential-typescrates/firstpass-proxy/Cargo.toml
crates.ioaws-smithy-runtime-apicrates/firstpass-proxy/Cargo.toml
crates.iogcp_authcrates/firstpass-proxy/Cargo.toml
crates.iohttpcrates/firstpass-proxy/Cargo.toml
Alle Abhängigkeiten nicht erhoben

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "agents",
        "ai-agents",
        "cost-optimization",
        "inference",
        "llm",
        "llm-router",
        "observability",
        "proxy",
        "reliability",
        "rust"
      ],
      "is_fork": false,
      "size_kb": 1965,
      "has_wiki": true,
      "homepage": "https://dshakes.github.io/firstpass",
      "languages": {
        "Rust": 1229302,
        "Shell": 3067,
        "Dockerfile": 1307
      },
      "pushed_at": "2026-07-26T02:59:24Z",
      "created_at": "2026-07-08T15:39:57Z",
      "owner_type": "User",
      "updated_at": "2026-07-26T02:55:59Z",
      "description": "Route every LLM request to the cheapest model that provably passes your quality gate — with a signed, tamper-evident receipt for every decision. Proof over prediction.",
      "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"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Shakes",
      "type": "User",
      "login": "dshakes",
      "company": null,
      "location": null,
      "followers": 7,
      "avatar_url": "https://avatars.githubusercontent.com/u/7453460?v=4",
      "created_at": "2014-04-30T20:44:31Z",
      "is_verified": null,
      "public_repos": 46,
      "account_age_days": 4469
    },
    "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": "v0.2.7",
          "kind": "patch",
          "published_at": "2026-07-26T03:03:27Z"
        },
        {
          "tag": "v0.2.6",
          "kind": "patch",
          "published_at": "2026-07-26T00:33:01Z"
        },
        {
          "tag": "v0.2.5",
          "kind": "patch",
          "published_at": "2026-07-25T22:57:30Z"
        },
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2026-07-25T19:19:46Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2026-07-25T17:29:18Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-07-25T17:10:02Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-07-24T05:20:13Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-07-20T10:28:14Z"
        },
        {
          "tag": "v0.1.7",
          "kind": "patch",
          "published_at": "2026-07-17T04:04:48Z"
        },
        {
          "tag": "v0.1.6",
          "kind": "patch",
          "published_at": "2026-07-17T01:46:36Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-07-16T12:28:32Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-07-15T22:39:39Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-07-15T16:24:15Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-07-15T15:43:37Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-07-14T12:41:32Z"
        },
        {
          "tag": "v0.1.0-rc.1",
          "kind": "prerelease",
          "published_at": "2026-07-14T04:18:00Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-09T03:08:24Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "9fb7340d4988ccb70903070272dba461c50b2465",
          "body": "Cuts the release that repairs `ghcr.io/dshakes/firstpass:latest`.\n\n`latest` had been gated on `is_default_branch`, so every main push overwrote it\nwith an amd64-only build (arm64 is emulated and slow, so it is reserved for\ntags). Anyone on Apple Silicon pulling the recommended image got amd64. #155\n\n[…]\nio timeouts. That was the failure mode worth checking —\na `secrets`-gated `if` can evaluate false silently, leaving a fix that looks\napplied and never fires.\n\n481 tests, clippy -D warnings, fmt clean.",
          "is_bot": false,
          "headline": "chore(release): 0.2.7 — restore a dual-arch `latest` image (#156)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-26T02:55:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36af9cedca7931f189cf777136875eb5f4aa9503",
          "body": "…mmit (#155)\n\n`latest` was tagged with `enable={{is_default_branch}}`, so every push to main\noverwrote it — and main builds are amd64 ONLY (arm64 is emulated and slow, so it\nis reserved for tags). The result: `ghcr.io/dshakes/firstpass:latest` was\nsingle-arch almost all the time, and anyone on arm64\n[…]\nease tags, which are the dual-arch builds. Main pushes\nstill publish `sha-<short>` tags, so per-commit images remain available for\ndebugging; they simply no longer masquerade as the recommended image.",
          "is_bot": false,
          "headline": "fix(docker): point `latest` at the last release, not the last main co…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-26T02:52:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5fce88a7d86ddb85013aa9c7ab5f4eaf318f6004",
          "body": "Docker Hub's ANONYMOUS pull limit is what actually failed runs here — BuildKit\npulls timing out with registry-1.docker.io DeadlineExceeded, not the build.\nAuthenticating lifts that limit substantially.\n\nTwo deliberate choices, both because of how the previous attempt at this went:\n\n  - **Fails open.\n[…]\nt by the repo\nowner and consumed only by docker/login-action.\n\nThe pre-existing login-action step is unrelated — it authenticates to GHCR for\npushing. This one authenticates to Docker Hub for pulling.",
          "is_bot": false,
          "headline": "ci(docker): authenticate to Docker Hub when credentials exist (#154)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-26T02:01:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21722acec5ffcf34dd27cd4338181dac8d3e9f29",
          "body": "Ships the fix for the last known limitation in ADR 0009: resolved outcomes now\nattribute to the route that produced them, rather than pooling onto route 0.\n\nThat pooling was a hole in the guard, not just imprecision. A healthy route's\nsuccesses dilute a failing route's rate, so the bound can sit und\n[…]\nfloor. Set min_n too low and a\nperfectly acceptable route trips the moment judging begins. That belongs in the\noperator's config guide, not buried in a test.\n\n481 tests, clippy -D warnings, fmt clean.",
          "is_bot": false,
          "headline": "chore(release): 0.2.6 — guardrail route attribution (#153)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-26T00:26:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3474449994248a32550037685bbc3f4d3b3dd6b5",
          "body": "…152)\n\nCloses the limitation carried since D3: every resolved outcome was recorded\nagainst route 0, because deferred verdicts had no way to say which route the\ndecision came from.\n\nThat is not merely imprecise in a multi-route config — it is a hole in the guard.\nPooled onto one bucket, a healthy rou\n[…]\null window. The min_n floor added with D3 only guarantees a zero-failure window\ncannot breach; a low-but-nonzero rate can still fire early if min_n is small.\n\n481 tests, clippy -D warnings, fmt clean.",
          "is_bot": false,
          "headline": "fix(guardrail): attribute outcomes to the route that produced them (#…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-26T00:23:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "527a8c8ab8d2335acc144128337b7e65fb55111e",
          "body": "Ships the three mechanisms that turn \"flip to enforce and hope\" into a path an\noperator can walk: shadow -> ramp -> guard. All default-off; a config that omits\nthem behaves byte-identically to 0.2.4.\n\n  - [route.shadow]   measure what Firstpass would have served, on your own\n                     tra\n[…]\nch\n\nVerified on the 0.2.5 build: a config exercising all three parses and clears\n`firstpass doctor`.\n\nVersion bumped across Cargo, README and 30 site pages — every occurrence, not\njust nav and footer.",
          "is_bot": false,
          "headline": "chore(release): 0.2.5 — progressive delivery (ADR 0009) (#151)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T22:48:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "26d9ac95b1145d5d3024f8ec53d2a80fce4cab7c",
          "body": "…ADR 0009 D3 + D4) (#150)\n\n* feat: wire the guardrail end to end, and document progressive delivery (ADR 0009 D3 + D4)\n\n**Wiring.** The guardrail had decision logic and a state machine but nothing\ncalled it. Now:\n\n  - `[guardrail]` exists as global config, validated at parse;\n  - dispatch checks dem\n[…]\nthe honest mitigation\nis a re-run, or authenticating to Docker Hub if it becomes frequent enough to\njustify a secret. Redirecting to a registry without checking the image is there\nis not a mitigation.",
          "is_bot": false,
          "headline": "feat: wire the guardrail end to end + document progressive delivery (…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T22:22:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b2416255555750483e6e63ccf593c44ed194def",
          "body": "…breach (ADR 0009 D3) (#149)\n\nFirstpass publishes a distribution-free bound on served failures, calibrates it\nonce, and then trusts it indefinitely. Metrics expose counters and gate error\nbudgets trip individual gates, but nothing watched the served-failure rate\nitself — the quantity the headline gu\n[…]\nce from a regime no longer in effect.\n\n479 tests, clippy -D warnings, fmt clean.\n\nNot yet wired into dispatch or the feedback path — the decision logic and state\nmachine land first, as with D1 and D2.",
          "is_bot": false,
          "headline": "feat(core): guardrail — watch the served-failure bound and demote on …",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T22:05:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d145497537d4562e35d9acc5cd0753ba10d751d9",
          "body": "…R 0009 D2, part 1) (#148)\n\n* feat(core): shadow-scoring primitives — sampling and spend ledger (ADR 0009 D2, part 1)\n\nFoundation for shadow scoring. Deliberately does NOT add `[route.shadow]` yet:\nthe execution path is not wired, and a config block that parses but changes\nnothing reads as a working\n[…]\n by default, invalid values rejected\nat parse rather than clamped — a silently-corrected ceiling would spend a\ndifferent amount than the operator authorised.\n\n463 tests, clippy -D warnings, fmt clean.",
          "is_bot": false,
          "headline": "feat(core): shadow-scoring primitives — sampling and spend ledger (AD…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T21:57:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6f80e09b8b4ac9ee8b18213a21622d508716ad5f",
          "body": "… (#147)\n\nAdds ADR 0009 (progressive delivery) and implements its first decision.\n\nEnforce was all-or-nothing. `Route.match_` slices traffic by request features,\nso there was no way to say \"5% of otherwise-identical traffic\" — the only ramp\navailable was to hand-craft a matcher selecting a small sli\n[…]\nisabled — \"a session is self-consistent\" is also true when\neverything enforces — so it now asserts the concrete arm `rollout::decide`\npredicts for each session, and requires both arms to be exercised.",
          "is_bot": false,
          "headline": "feat(routing): percentage rollout with stable bucketing (ADR 0009 D1)…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T21:30:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5f06abaef3ae6834c4073e27d43adebea89b8b1",
          "body": "…alls (#146)\n\n0.2.3 shipped `firstpass upgrade`, and on a real pipx install it reported\n\"unrecognised\" and printed all six commands. This cuts the release that carries\nthe fix to installed users — the detection is only useful once it is in the\nartifact people actually have.\n\nVersion bumped across Ca\n[…]\neplaced this time, not just the nav and footer: the 0.2.2 bump left three\nversion mentions in the docs overview prose contradicting that same page's\nchrome, and it took a verification sweep to notice.",
          "is_bot": false,
          "headline": "chore(release): 0.2.4 — `firstpass upgrade` recognises symlinked inst…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T19:09:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "09b941df5920018b7094cf2bb9489fbb8b833cfe",
          "body": "Reported from a real machine: `firstpass upgrade` on a pipx install reported\n\"unrecognised\" and printed all six commands instead of the one that applies.\n\n`current_exe()` returns the path the binary was LAUNCHED through, not the file\nitself. pipx installs into its own venv and puts a symlink on PATH\n[…]\ntelling a pipx user to run\n`uv tool upgrade` is still the wrong instruction, just a more specific one.\npipx is matched before the generic Python markers because a pipx venv contains\nsite-packages too.",
          "is_bot": false,
          "headline": "fix(cli): resolve symlinks before detecting the install channel (#145)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T19:05:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e492ce60286d9ff20264e9873d0b812f53940df2",
          "body": "The docs builder and `firstpass onboard` were two implementations of the same\nTOML format. Both were parser-verified and they agreed, but nothing held them\ntogether — and a docs page that emits config the binary would reject is worse\nthan a page with no builder at all.\n\nRust now owns the format outr\n[…]\nt by driving the real page,\nnot by reading the diff.\n\nVerified end to end: the config the page serves for google/code/enforce is\nbyte-identical to what `firstpass onboard` writes for the same answers.",
          "is_bot": false,
          "headline": "fix(docs): make Rust the only implementation of the config format (#144)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T18:49:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "51966eb19a7a9cd986d39bcb0bd01af00d4bf611",
          "body": "…143)\n\nTwo things, folded into one pass because the first is a bug in code already on\nmain and the second touches the same files.\n\n**The rig hid its own payoff on a phone.** The cost figures lived inside the\nSVG, and an SVG cannot reflow — so at 390px the panel showed the ladder and\npushed the bars,\n[…]\nsibilitychange if it loaded hidden, and runs a failsafe that\nstrips the hiding class from anything still unshown. Worst case is \"no\nanimation\", never \"no content\". Reduced motion never arms it at all.",
          "is_bot": false,
          "headline": "fix(docs): rig readout reflows on mobile; landing depth and reveal (#…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T18:35:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a58b8957435ca28f4ec6954048afc4d1aa551c3e",
          "body": "…t (#142)\n\nThe hero's terminal printed a plausible-looking log. It read as a screenshot of\noutput rather than as the argument, and the argument is the thing worth showing.\n\nReplaces it with \"the rig\": a single instrument panel that draws the motto\ninstead of asserting it. A request opens on rung 0, \n[…]\nee stale \"v0.2.1\" mentions in the docs overview prose, which the\nnav/footer version bumps had never touched — that page had been claiming one\nversion in its chrome and another in its body since 0.2.2.",
          "is_bot": false,
          "headline": "feat(docs): landing centrepiece — one decision, drawn as an instrumen…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T17:56:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d87bfb749732efc6bfb37823cd6cde507088c5e",
          "body": "…#141)\n\n0.2.2 shipped `firstpass demo`; this cuts the release that makes\n`firstpass upgrade` reachable from the channels people actually install from.\nThe command is only useful once it is in a published artifact — a self-updater\nnobody can install is not an upgrade path.",
          "is_bot": false,
          "headline": "chore(release): 0.2.3 — `firstpass upgrade` reaches installed users (…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T17:22:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f89cc774a7ff9406a294e71f176feed75119e5a",
          "body": "* feat(cli): `firstpass upgrade`, and point the docs at `uvx firstpass demo`\n\nUpgrading was undiscoverable. cargo-dist ships a self-updater, but it is named\n`firstpass-update`/`firstpass-proxy-update` — nobody guesses that — and it only\nexists for the installer-script channel. `firstpass upgrade` no\n[…]\n made-up uv cache path. Replaced with the two\nlayouts actually on disk — uvx's ephemeral env under `archive-v0`, and the\n`uv tool install` location — so the heuristic is pinned to what uv really does.",
          "is_bot": false,
          "headline": "feat(cli): `firstpass upgrade` + quickstart demo via uvx (#140)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T17:19:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "14ce8a0b765b02c6e474f4a56421433dfe9dbd9e",
          "body": "The no-keys demo was a cargo example. Examples are not `[[bin]]` targets, so it\nnever shipped in the wheel or the release binaries — the only way to run it was\nto clone the repo and have a Rust toolchain, which is a steep first step for a\nquickstart that promises 60 seconds.\n\nMoves the demo into the\n[…]\n throughout.\n\nBumps to 0.2.2 so the published wheel actually contains the subcommand — the\ndocs change that points the quickstart at `uvx firstpass demo` follows this\nrelease rather than preceding it.",
          "is_bot": false,
          "headline": "chore(release): 0.2.2 — `firstpass demo` ships in the binary (#139)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T17:02:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b48888541d72459a3bed6c86c466ecbd246b6caa",
          "body": "* feat(onboard): ask three questions and write a runnable firstpass.toml\n\n`firstpass onboard` detected the environment and wired the base URL, but left\nthe routing config as an exercise — the docs handed you a TOML blob to retype.\nIt now asks the three things that actually differ between setups (pro\n[…]\nishes llms.txt (plus AGENTS/README/SPEC) to the site root. Pages\nserves docs/ as root, so the machine-readable entry point the site advertises\nwas returning a 404 to the very agents it is written for.",
          "is_bot": false,
          "headline": "feat: onboard writes the config; agent-first install, new mark (#138)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-25T03:02:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36ddb337085c1981e7d03d2207a72ee883af01b3",
          "body": "docs(tutorial): Module 1 — response anatomy + Anthropic/Bedrock/Vertex front doors",
          "is_bot": false,
          "headline": "Merge pull request #137 from dshakes/docs/module1-response-access",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T16:58:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff8a05823156d11ab643d39cb1e91b9c9a777a54",
          "body": "…x front doors\n\nTwo additions to the 'One request, one response' module, both requested:\n- 'Same wire, different front doors' — a table of how Anthropic-direct / Amazon\n  Bedrock / Google Vertex differ (endpoint, auth, where the model id goes:\n  bedrock-2023-05-31 / vertex-2023-10-16 anthropic_versi\n[…]\nation/cache_read fields) and a\n  scannable stop_reason values table (end_turn / tool_use / max_tokens / stop_sequence).\n\nModule balanced/validated; front-doors table Chrome-checked, no console errors.",
          "is_bot": false,
          "headline": "docs(tutorial): Module 1 — response anatomy + Anthropic/Bedrock/Verte…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T16:56:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c09915ba7cc95c280df1f6ef2cef25a985000ea0",
          "body": "docs(tutorial): 'how the bill builds' story-arc diagram on the course hub",
          "is_bot": false,
          "headline": "Merge pull request #136 from dshakes/docs/story-arc",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T16:55:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0be0256ef0eeb1a5b32da17843c6ebbd27b7460b",
          "body": "…course hub\n\nThe hub had the course index but no picture of the narrative. Added a single\nrising-then-dipping cost curve across the core path — one call (nearly free) →\nmulti-turn (compounds) → tools (× many calls) → caching (bends it down) → a full\nsession (the sum) — so the reader sees the whole story before diving in. Validated\n(balanced, unique ids/markers, no accent-fill).",
          "is_bot": false,
          "headline": "docs(tutorial): add a 'how the bill builds' story-arc diagram to the …",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T16:52:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf29ff483cd08337221d4aa9308c7e5ef1cae78d",
          "body": "docs(tutorial): cover /clear alongside compaction in the CC-session module",
          "is_bot": false,
          "headline": "Merge pull request #135 from dshakes/docs/cc-clear",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T16:29:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41eb92170ad75a97f386a52c63cd22193dbed70f",
          "body": "…odule\n\nThe 'when the window fills' section explained compaction but not its opposite, /clear.\nAdded both with the distinction: compact summarizes and continues the same task (keeps\nthe thread, costs a summary call, invalidates the prompt cache); clear wipes the\nconversation and starts fresh (no summary, cheapest reset, for an unrelated task). Plus a\ncompact-vs-clear comparison table and a Key-idea callout on how each resets the meter.",
          "is_bot": false,
          "headline": "docs(tutorial): cover /clear alongside compaction in the CC-session m…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T16:27:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bab0e83b88b2fd3cce95ef0c878d7d67fce2a395",
          "body": "docs(tutorial): redraw the 7 remaining anchor diagrams + widen course pages",
          "is_bot": false,
          "headline": "Merge pull request #134 from dshakes/docs/redraw-diagrams",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T16:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61cd5f183b2db1bf1432b7b1f24c3c4171e42c12",
          "body": "… pages\n\n- Redrew every reused anchor diagram to the fresh bar: one-request (wire),\n  multi-turn (rising per-turn input + transcript-grows stacks), tools (model↔code\n  racetrack), caching (two-curve, write-spike direction fixed), CC session (session\n  timeline, split the combined step + cache-invali\n[…]\nied the wider layout + redrawn loop diagram, no console errors.\n(Note: the live 'Requests 101' text a reader saw was a stale browser cache — the\ndeployed title is already 'How Agents Talk to Models'.)",
          "is_bot": false,
          "headline": "docs(tutorial): redraw the 7 remaining anchor diagrams + widen course…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T16:15:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5cba18bf3a7e9ca4b284f1c7dec2fc5426814d78",
          "body": "docs(tutorial): a concept diagram anchoring every module + Lesson→Module",
          "is_bot": false,
          "headline": "Merge pull request #133 from dshakes/docs/lesson-diagrams",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T15:54:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69d7ddbca65f1f2e85f64a040965df31831557ac",
          "body": "…dule'\n\nVisual-first pass on the How Agents Talk to Models tutorial:\n- Added a concept-anchoring fp-svg diagram (right after the intro) to the six modules\n  that lacked one: token meter (rate asymmetry + tier ladder), client shapes (3-column\n  cost drivers), streaming (non-streaming vs streaming tim\n[…]\n six diagrams: fp-svg idiom, unique marker ids, theme-aware CSS vars, no invalid\nclasses; validated (balance, ids, markers, aria wired). Chrome-verified images +\ntoken-meter render, no console errors.",
          "is_bot": false,
          "headline": "docs(tutorial): a fresh diagram anchoring every module + 'Lesson'→'Mo…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T15:52:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d5c24c498fce7477f219ac18653b63244eca2cb",
          "body": "docs: 'How Agents Talk to Models' — multi-page tutorial (rebuild of Requests 101)",
          "is_bot": false,
          "headline": "Merge pull request #132 from dshakes/docs/how-agents-talk-tutorial",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T15:17:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5056034d4226c2b226c4ab86a660eeaf66cc6af",
          "body": "…age tutorial\n\nReplaces the single 1,100-line linear-scroll page with a paced, visual-first,\nmulti-page course (the reader's feedback: a linear wall isn't world-class tutorial UX).\n\n- Renamed 'Requests 101' -> 'How Agents Talk to Models' (URL requests-101.html kept\n  so no inbound links break; main-\n[…]\ns rewritten from in-page anchors to lesson URLs. Every prev/next,\nsidebar entry, and cross-ref verified to resolve; all pages balanced. Chrome-verified\nhub + a lesson, light + dark, no console errors.",
          "is_bot": false,
          "headline": "docs: rebuild Requests 101 as 'How Agents Talk to Models' — a multi-p…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T15:14:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d937a5c4922cd4378e58ad74871d6372aef6388c",
          "body": "docs(requests-101): rebuild to world-class — running example, module map, 5 new modules",
          "is_bot": false,
          "headline": "Merge pull request #131 from dshakes/docs/requests-101-worldclass",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T14:50:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e136a8d25a757156f38e9f5583ad669e16568a3b",
          "body": "…map, 5 new modules\n\nAddresses reviewer + reader feedback that the primer was good but not world-class.\nTwo structural fixes both reviews flagged as biggest gaps:\n- ONE running example threaded through the whole core path: a coding agent doing a\n  single real task (make POST /orders reject a missing\n[…]\nHTTP status codes verified; receipt matches the real Trace\nschema; only 82%/7.7%/974 measured numbers cited. Chrome-verified light+dark, no console\nerrors (module map, MCP, images, headless, receipt).",
          "is_bot": false,
          "headline": "docs(requests-101): rebuild to world-class — running example, module …",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T14:46:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "add65778f9f77de6fa9b5774d3ef92e3e81f6007",
          "body": "docs(site): sharpen the product-story arc — rename page 05, de-duplicate the loop",
          "is_bot": false,
          "headline": "Merge pull request #130 from dshakes/docs/story-flow-polish",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T13:41:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0865c59c54886343daf2cdfd3f5f97603fbf25a",
          "body": "…ate the loop\n\nStory/flow pass over the product-narrative spine (Overview → Quickstart →\nRequests 101 → How it works → 05 → Gates → Routing & escalation → …):\n\n- Rename page 05 'Routing, end to end' → 'Every scenario, end to end' site-wide\n  (title/h1/crumb/sidebar/pagers/cross-links; filename reque\n[…]\neferences\n  that read awkwardly after the rename.\n\nNo SVG diagrams touched; all anchors/ids preserved; Chrome-verified (title,\nsidebar, reframed opening, no console errors); all 15 pages re-validated.",
          "is_bot": false,
          "headline": "docs(site): sharpen the product-story arc — rename page 05, de-duplic…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T13:35:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "898cfe036ab0306063948c4e226c8612e9d30a86",
          "body": "docs(site): Requests 101 + layered/verbose elevation of the full docs guide",
          "is_bot": false,
          "headline": "Merge pull request #129 from dshakes/docs/requests-101-fundamentals",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T12:50:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dfb715434f0c02ee2f0afedd5362010e68db462",
          "body": "Applies the Requests-101 layered style system site-wide: per-page and\nper-section TL;DRs, one-line recaps, and Key idea / Common mistake / Under the\nhood callouts, plus .subh sub-modules — a scannable spine over deep detail.\n\nPages elevated (14): how-it-works, request-flow, gates, routing, guarantee\n[…]\n / 10% / 95%).\nAssets already on ?v=3 site-wide. Six + N verified diagrams byte-intact.\n\nChrome-checked (light+dark, no console errors): requests-101, how-it-works,\nguarantee, configuration, receipts.",
          "is_bot": false,
          "headline": "docs(site): elevate all guide pages to the layered/verbose bar",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T12:29:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ee4a45a0201362cd696e6c4b0c2a0e9f2941ba8",
          "body": "…louts, Module 8 (Claude Code session), 3 sequence diagrams\n\n- Add layered-doc style system to docs.css (.tldr/.recap/.subh; .modnum) and\n  render it: page + per-module TL;DRs, one-line recaps, and Key idea /\n  Common mistake / Under the hood callouts (reusing .note variants).\n- Module 4: full four-\n[…]\n known gap; no history summarization).\n\nVerified: HTML structure (unique ids, 9 diagrams wired, markers defined),\nChrome light+dark render of all 3 new diagrams and layered devices, no console errors.",
          "is_bot": false,
          "headline": "docs(requests-101): elevate to layered/verbose bar — TL;DR spine, cal…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T11:55:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "062bfd99c88458ec5ce39223d03e16160732c75d",
          "body": "…idging to Firstpass (Part B)\n\nNew self-contained educational page (docs/guide/requests-101.html), placed at\nsidebar 03 in Getting started. Teaches, from first principles and with no\nFirstpass knowledge assumed:\n\n  Part A — the vanilla fundamentals, as world-class UX module-cards:\n   1 one request/r\n[…]\nacross all 14 existing guide pages (03 inserted,\n04-15 bumped) and reroutes the quickstart->requests-101->how-it-works pager\nchain. Verified in Chrome (all 6 diagrams, both themes, no console errors).",
          "is_bot": false,
          "headline": "docs(site): add Requests 101 — fundamentals + cost primer (Part A) br…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T05:45:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b964799ce02317546d575de7bcc90a86edd09a1",
          "body": "…-story\n\ndocs(site): add Quickstart page + connect the funnel end to end",
          "is_bot": false,
          "headline": "Merge pull request #128 from dshakes/docs/quickstart-funnel-connected…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T05:10:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4af8b00f007c922271d6461cad261a2e3dfb6e0",
          "body": "The elastic-verification page framed the Phase 3 serving path as unbuilt\n('research direction, not shipped', 'Phase 1 shadow measurement is landing'),\nbut PR #123 (081279e) merged the config-gated skip-on-serve path: proxy.rs\nreads escalation.elastic and skips named expensive gates when the visible\n\n[…]\nyte-identical until a calibrated lambda is supplied.\nKeep every honest caveat (offline-only validation, n=150, must replicate\nbefore it earns default status). Uniform verification remains the default.",
          "is_bot": false,
          "headline": "docs(site): correct elastic under-claim — serving path ships default-off",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T05:08:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49b47f7f215ca58e6fc6b7c9b7ecfaafbf176329",
          "body": "Docs-only release: connected-story funnel overhaul, payload-first request-flow,\nproblem-first routing with hero + money diagrams, diagram alignment/animation\nvalidation, and reality-check accuracy fixes (no over/under-claims). No code\nchange — patch bump. Version strings synced across Cargo.toml, Cargo.lock,\nREADME, and the full docs site (landing + 14 guide pages + ga-handoff).",
          "is_bot": false,
          "headline": "chore(release): v0.2.1 — docs/site release cut",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T05:01:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb63d01d909e503d9231ca11ec49ecc51771ddda",
          "body": "…ips today\n\nThe per-query P(gate-pass|features) predictor is implemented (predictor.rs,\nADR 0008 Phase 2): default-off, shadow-only, recorded on the receipt. Listing\nit as pure 'Next & research' undersold shipped code. Reword to state the\npredictor ships in shadow; only acting on it is gated on an offline AUC/Brier\neval. Elastic skip-serving left as-is — elastic.rs is offline/bench, so its\n'research, validating' framing is already accurate.",
          "is_bot": false,
          "headline": "docs(site): correct pass-predictor under-claim — shadow prediction sh…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T04:55:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61f9c2fc37538acbde29a833e81a5b18b19fe276",
          "body": "Verified against docs/benchmarks/mbpp-live-base.txt: it is a SINGLE-model\nconformal run (candidate: one live Anthropic solver), so '82%' is the\nfraction of cheap-rung outputs that clear the conformal serve threshold\n— the other 18% are withheld below threshold, not escalated to a strong\nrung. No com\n[…]\nThe '82% served from the cheap tier' framing on the guarantee/benchmarks/\noverview pages is left as-is: it is an accurate deployment reading of the\nmeasured serve fraction and claims no measured cost.",
          "is_bot": false,
          "headline": "docs: correct over-claims flagged by reality-check audit",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T04:50:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "12d9a697d74b6907aa1129093f9a82828fb0a63b",
          "body": "The landing listed 'Selectable modes' (cost/balanced/quality/latency/max\nvia x-firstpass-mode) under Next & research, but the presets are\nimplemented (firstpass-core/src/config.rs RoutingMode + preset(),\nproxy.rs resolve_mode) and the Overview #status lists Modes as shipped.\nMove the shipped presets to the Shipped column; keep only the genuinely\nfuture constraint-form modes under Next.",
          "is_bot": false,
          "headline": "docs(site): fix status miscue — mode presets are shipped, not 'next'",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T04:33:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad036d165742315820b056d13eceb8bad445d8c0",
          "body": "- Lifecycle diagram: replace the hand-tuned bezier fork/merge connectors\n  (which rendered crooked) with symmetric curves — the match box forks\n  cleanly up to enforce and down to observe, and both converge to the\n  serve box center.\n- Subagent diagram: straighten the two accent connectors that were 1px\n  off horizontal.\n- Add a validator pass: all 10 fp-svg diagrams checked for near-but-not\n  horizontal/vertical connectors and text overflow — all clean.",
          "is_bot": false,
          "headline": "docs(site): fix diagram alignment — lifecycle fork + subagent connectors",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T04:27:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84261a85c97da0e13ac25182276c588c92ba06b0",
          "body": "The page opened on mechanism (the one idea, the unit of routing) and\nburied the value under monotonous box-and-arrow schematics. Lead with\nthe problem and the aha instead, and carry it with two designed\ncenterpieces.\n\n- Rewrite the opening problem-first: the runaway agent bill, why the two\n  obvious\n[…]\note #request-shape to a top-level section;\n  update the on-this-page TOC.\n\nVerified in Chrome (light + dark): both hero diagrams render, colours\nadapt per theme, on-bar text has contrast, no overflow.",
          "is_bot": false,
          "headline": "docs(site): reframe routing problem-first with two hero diagrams",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T04:23:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bd8afcc2e5f2bf249da176749993cd5fe1cc8929",
          "body": "…rios e2e\n\nThe page showed two routing outcomes end-to-end (cheap-passes, escalate)\nbut buried them under topology prose, and never showed the other three\nreal outcomes at all. A reader couldn't see, per scenario, the request\npayload → what happens → the response + receipt.\n\n- Add a scannable 'Every\n[…]\nnd render correctly in light + dark.\n- TOC updated with the four new sections.\n\nVerified in Chrome (light + dark): all three diagrams render, colors\nadapt per theme, the scenario map + scrollspy work.",
          "is_bot": false,
          "headline": "docs(site): make request-flow payload-first — add the 3 missing scena…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T03:49:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ba4ef197fe29dc97f3c59d555ccc2df1b6a0d21c",
          "body": "The docs told the four-moves story conceptually 3-4x but never once\noperationally, and had no getting-started spine: install/run lived only\nin a buried landing tail, the orphaned usage.html, and cli.html#install.\nA customer landing on the site couldn't get from 'what is this' to\n'I ran it' without h\n[…]\nssets/how.svg (old dark\n  site, zero inbound references).\n\nVerified: 01-14 numbering + sidebar aria-current on all 14 pages, pager\nchain intact, all internal links resolve, deleted files unreferenced.",
          "is_bot": false,
          "headline": "docs(site): add Quickstart page + connect the funnel end to end",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T03:23:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c37480c84739c5d7d476d45b221414cf31b13eb5",
          "body": "docs(site): elevate request-flow into a complete end-to-end routing tutorial",
          "is_bot": false,
          "headline": "Merge pull request #127 from dshakes/docs/request-flow-e2e-polish",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T02:55:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd63a97278cbd7cd1f74142cf886992a699aa5b6",
          "body": "…agent transcript note\n\n- New #why-expensive section bridges request-shape → lifecycle (the three-beat\n  e2e arc: how CC sends requests → why it is expensive → how Firstpass helps).\n  Reuses on-page receipt numbers only (/bin/zsh.0630 baseline, /bin/zsh.0128 served).\n- #multiturn now SHOWS accumulat\n[…]\ndy, so a different rung can answer turn 12 and lose nothing).\n- #subagents: own-transcript clarifier (context does not leak between agents).\n- TOC now includes #why-expensive so every h2 is navigable.",
          "is_bot": false,
          "headline": "docs(site): add why-expensive beat, multi-turn accumulation demo, sub…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T02:43:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "68c172fcd8dd142625c5bad143820d277e8b55f8",
          "body": "Direct, plain, short sentences. Cut flourish and cutesy note labels\n(load-bearing sentence, first-class mode, steering wheel) while keeping\nall technical depth, figures, code, and tables intact.",
          "is_bot": false,
          "headline": "docs(site): tighten routing page to YC prose voice",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T00:33:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9759ef4447b74290ed7bd40acfd3297beb1292f3",
          "body": "…ty-first, deeper, richer figures\n\nReframes the page from \"Request flow\" to \"Routing, end to end\" (label only;\nfilename and all hrefs unchanged, so zero link churn). Three axes:\n\n- Framing: lead with capability. The three apologetic \"honest boundary\" /\n  \"real cost ceiling\" / \"honest notes\" caveats \n[…]\ns,\n  colored verdict lanes, dashed+pulse connectors, staggered delays, and a\n  new escalation+receipt marquee for #complex.\n\nSidebar label (12 sibling pages) and the two pager labels updated to match.",
          "is_bot": false,
          "headline": "docs(site): rework request-flow into \"Routing, end to end\" — capabili…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-24T00:29:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c8f81bdcf105baa8bf192c6fdc0ebc9d61a445f",
          "body": "New guide page \"Request flow\" (Getting started / 03) that walks a prompt\nfrom Claude Code and the Claude Agent SDK to the served answer, basics to\nadvanced:\n\n- the one idea: Firstpass is a proxy below the agent, it sees independent\n  POSTs, not turns/agents\n- the unit of routing (one request), reque\n[…]\n lifecycle, subagent routing,\nmulti-turn strip). Wires the page into the sidebar across all 13 guide\npages (renumber 03..12 -> 04..13) and fixes the how-it-works/gates pagers.\nNo product code touched.",
          "is_bot": false,
          "headline": "docs(site): add end-to-end request-flow tutorial page (#126)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-23T23:22:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "09da5a340bd11ae6da30937e4d522f5c52061313",
          "body": "The configuration reference was diagram-less. Add one animated fp-svg\nfigure that makes the page's thesis visual: a firstpass.toml split into\nthe two REQUIRED sections ([ladder] + [[gate]]) and the OPTIONAL,\ndefaulted-and-off rest ([bandit], [speculation], [budget], [[provider]],\n[[route]]), flowing into a running cascade.\n\nLive-validated in Chrome, dark + light themes.",
          "is_bot": false,
          "headline": "docs(site): add config-anatomy diagram to configuration.html (#125)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-23T02:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14813e9f8d5adec5bd98b58bd621978035f3c880",
          "body": "… (#124)\n\nThe gates guide was the only core-mechanics page carrying no diagram.\nAdd two animated fp-svg figures matching the site idiom:\n\n- verdict-flow: candidate → GATE → three color-coded outcomes\n  (pass→serve, fail→escalate, abstain→on_abstain), the core mechanic.\n- cost-spectrum: the five built-in gates ordered cheapest-proof-first,\n  reinforcing 'run the cheapest proof that settles the decision'.\n\nLive-validated in Chrome, dark + light themes.",
          "is_bot": false,
          "headline": "docs(site): add verdict-flow and cost-spectrum diagrams to gates.html…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-23T02:45:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "081279e42f12ad5006c6912a8212c73244038ec0",
          "body": "…ed, default-off) (#123)\n\n* feat(proxy): ADR 0008 Phase 3 — elastic-skip serving path (config-gated, default-off)\n\nWire the elastic three-regime rule into the serial serving engine, behind\n`routing.escalation.elastic`. When configured with a pre-calibrated λ and the set\nof expensive gate ids:\n\n  - v\n[…]\nates; ambiguous runs expensive; off = no field).\nWorkspace: clippy --all-targets clean; 60 bench + 98 core + 271 proxy + 6 integration, 0 failures.\n\n* style: cargo fmt import ordering (1.93.1 rustfmt)",
          "is_bot": false,
          "headline": "feat(proxy): ADR 0008 Phase 3 — elastic-skip serving path (config-gat…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-22T11:31:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "87a3f35ba28636f719ff03d6b89e049fff24b2b6",
          "body": "…animated SVGs (#122)\n\nThe three most-load-bearing landing sections carried prose but no figure. Add an\ninline, animated (reduced-motion-gated) SVG to each, reusing only the existing\nfp-* CSS vocabulary — HTML-only, no docs.css/js change, cache-buster stays ?v=2:\n\n- Elastic three-regime: a cheap k-s\n[…]\nct.\n- Modes frontier: cost/quality Pareto curve with the balanced default haloed and\n  latency shown as an orthogonal offshoot (same point, lower tail).\n\nValidated live in Chrome, dark + light themes.",
          "is_bot": false,
          "headline": "docs(site): fill the landing page's three diagram-less sections with …",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-22T03:36:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c886b85d50e1d1b8b2a5a03804f8197dfe65f423",
          "body": "…ost, keep the bound (#121)\n\nfirstpass-bench --elastic: the money-saver, proven safe before it can touch serving. Calibrates\nthe skip threshold on a train split via split-conformal (served-failure among skips bounded ≤ α\nat 1-δ), then measures cost + realized served-failure on a HELD-OUT split. Resu\n[…]\nas verified ones.\nCommitted artifact docs/benchmarks/elastic-validation.txt; ADR 0008 Phase 3 + roadmap updated.\nServing-path change stays default-off until drift + beyond-MBPP replication. 431 tests.",
          "is_bot": false,
          "headline": "feat(bench): elastic verification Phase 3 offline validation — save c…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-22T03:06:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c6b10101a3571de0212554a121e8cf2182a7afda",
          "body": "…afe? (#120)\n\nfirstpass-bench --ablation: over the same tasks + ladder, compares start-0 (naive cascade),\noracle (cheapest passing rung), and a learned per-context start rung (trained on a split,\napplied held-out). The decisive number is gap-closed = fraction of the start-0 → oracle cost\nheadroom th\n[…]\n context fully predicts. The real\nper-deployment number is whatever firstpass predictor-eval reports on the operator's receipts;\nthis measures the mechanism's ceiling. 429 tests, clippy -D, fmt clean.",
          "is_bot": false,
          "headline": "feat(bench): start-rung ablation — is the cost-brain smart, or just s…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-22T02:56:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "70241ac766ba7161393edc7823de29eb961463c4",
          "body": "…(shadow, default-off) (#119)\n\nOnline logistic-regression model of P(gate-pass | rung, query features) — the per-query,\nper-rung success signal the bandit's coarse context buckets can't express. Pure core\n(firstpass-core/predictor.rs, no ML deps): 21-dim encoding, sigmoid + SGD + L2 (bias\nunregulari\n[…]\nidentical (skip-serialized when None → hash-chain compatible).\nfirstpass predictor-eval: prequential AUC + Brier — the honest check before it can ever act.\n427 tests, clippy -D, fmt clean; CLI driven.",
          "is_bot": false,
          "headline": "feat(predictor): ADR 0008 Phase 2 — per-query P(gate-pass) predictor …",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-22T02:42:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d269ec83563266f5fba93c41e53bb052c5d1f440",
          "body": "…served stale (#118)\n\nBrowser-validated the live site (Chrome): the diagrams rendered static with a black-wedge\nartifact because the docs.css/js links had no ?v= cache-buster, so returning visitors got the\npre-animation stylesheet — .flow paths fell back to default (fill:black → the wedge, no stroke\n[…]\n:mint, fill:none, animationName:\nfp-flow (confirmed live via injected reload). Added ?v=2 to every docs.css/docs.js reference\nacross the landing + 12 guide pages so the animated system actually loads.",
          "is_bot": false,
          "headline": "fix(site): cache-buster on docs.css/js — the animated stylesheet was …",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-21T11:29:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "528b2621a6ed076c09d8a8bd3161279393881e0b",
          "body": "…odes, +7 new (#117)\n\nUpgraded every diagram to self-contained animated inline SVG (pure CSS keyframes, no JS, no\nSMIL, no GIFs, no external loads), gated in @media (prefers-reduced-motion:no-preference) so\nthe static/JS-off/reduced-motion fallback is the correct final diagram. Reusable primitives\ni\n[…]\nW: self-tuning loop,\nprobe fan-out, escalation-ladder climb, bandit start-rung, speculative escalation, receipt\nseal/verify, provider fan-out. 151 SVGs valid XML; no competitor names; facts unchanged.",
          "is_bot": false,
          "headline": "docs(site): animated futuristic diagrams — flowing signals, pulsing n…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-21T11:15:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d93253c680c69d4fd3b274e79cbbcf109636071",
          "body": "Rebuilt README to launch grade: sharp hero (\"proves the answer instead of guessing the\nmodel\"), badge row, the proof with the real committed numbers (974 MBPP tasks, ≤10%@95%\ndistribution-free, 5.5% calib / 7.7% served-fail / 82% cheap-tier), proof-vs-prediction\ncomparison (no competitor names), the\n[…]\nw-it-works, architecture (both\ndialects), guarantee chart, elastic-verification three-regime — all valid XML, readable on\nGitHub light+dark, matching the site's visual language. Zero competitor names.",
          "is_bot": false,
          "headline": "docs(readme): world-class YC-launch rebuild + polished diagrams (#116)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-21T11:12:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3129a9b92191a96b97d603b3bbf7656e7d93432a",
          "body": "…efault-off) (#115)\n\nAdds a pure-measurement shadow probe that runs k concurrent model calls on\na sampled fraction of enforce traffic and classifies the validated k-sample\ngate-pass-count signal into ConfidentPass / Ambiguous / ConfidentFail regimes.\nZero behavioral change when probe is off (Option:\n[…]\ne: None in Trace struct literals (mechanical)\n\nExample config: documented [escalation.probe] block with cost caveat.\n\nGate: cargo fmt --all --check clean, cargo clippy -D warnings clean, 419 tests ok.",
          "is_bot": false,
          "headline": "feat(probe): ADR 0008 Phase 1 — shadow probe (elastic verification, d…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-21T10:45:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f97e1f57eddbf5de5bf378d4d5c7b8c2234bb01a",
          "body": "…h a corrected signal (#114)\n\nRan the ADR 0008 go/no-go live (k=5, n=150 MBPP). Honest result: the pre-registered entropy\nmetric FAILED (AUC 0.431 — entropy discards direction), but the k-sample visible-pass COUNT\nsucceeds decisively: 0/5 pass → 0% oracle-correct (12% of traffic, escalate now); 5/5 \n[…]\nlone at ~99% safety. ADR 0008 → accepted with the\ncorrected signal; committed artifact; roadmap updated. The study reshaped the design instead of\nrubber-stamping it — which is the point of running it.",
          "is_bot": false,
          "headline": "docs(bench): probe study VERDICT — elastic verification validated wit…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-21T03:19:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eecff8c382722e5122481a5db2fa0d4e693d52ec",
          "body": "* feat(modes): named routing modes as constraint presets (ADR p4)\n\nAdd RoutingMode enum (observe|cost|balanced|quality|latency|max) with\nModePreset knob bundles. A mode is a resolver over existing escalation\nconfig — it overrides only the knobs it has an opinion on; Balanced is a\nstrict no-op (byte-\n[…]\nnstraints on\nthe elastic-verification optimizer once that lands.\n\nBuilt by a delegated engineer; lead re-ran the gate after rebase (fmt fixups): 396 tests,\nclippy -D, fmt clean; drove firstpass modes.",
          "is_bot": false,
          "headline": "P4: named routing modes (per-task/per-turn, x-firstpass-mode) (#113)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-21T03:15:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cc90fcd4e52ed0783bde2d1b54cbc5d77abecd41",
          "body": "…dmap vision (#112)\n\n- docs/index.html rebuilt to launch grade: hero → proof strip (links the committed 974-task\n  MBPP artifact) → the wedge → how (route/prove/escalate/learn) → the guarantee (5.5% calib\n  risk, 7.7% served-fail, 82% cheap-tier, LTT→enforce→adaptive-conformal) → gates ladder →\n  bo\n[…]\nl over the verify/skip decision; pre-registered\n  go/no-go validation gate (firstpass-bench --probe-study). Proposed, not accepted.\n- roadmap: elastic verification (P2, gated) + selectable modes (P4).",
          "is_bot": false,
          "headline": "docs: world-class launch site + ADR 0008 (elastic verification) + roa…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-21T03:08:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8bc1206ba8164c3eccac4c2794e808a37a08fa51",
          "body": "…instrument (#111)\n\nfirstpass-bench --probe-study: draw k cheap samples per MBPP task, score each against the\nvisible gate, serve the candidate a cascade would serve, and record whether it clears the\nhidden oracle. Reports AUC(self-consistency uncertainty → oracle failure) + skip-safety when\nconfide\n[…]\ned test of whether elastic verification is justified. Pure stats\n(binary entropy, Mann-Whitney AUC) unit-tested; live run reproducible from the committed\nMBPP command. 370 tests, clippy -D, fmt clean.",
          "is_bot": false,
          "headline": "feat(bench): probe-signal validation harness — the ADR 0008 go/no-go …",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-21T02:49:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6478095a7827535b0d3c584d500ecd46bab74210",
          "body": "…policy, verify_receipts + SLO doc (#110)\n\n- MCP: explain_route (why a decision went as it did), rehearse_policy (off-policy replay of a\n  candidate policy before enforcing — reuses ope), verify_receipts (tamper-evident self-audit);\n  now 8 tools total, all driven live over stdio\n- firstpass explain\n[…]\niance/slo.md: the served-failure SLO stated contractually, tied to the auditable\n  receipts; roadmap Phase 4 policy-rehearsal / SLO-language / MCP-tools items checked\n\n368 tests, clippy -D, fmt clean.",
          "is_bot": false,
          "headline": "feat(mcp+cli): agent-first Phase 4 surface — explain_route, rehearse_…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T10:46:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f97e697ce501eae9dc5062953427fd5720ac53ff",
          "body": "…ify (Phase 4) (#109)\n\n- firstpass export [--out F]: sealed receipt log as JSONL, chain order, hashed bodies only\n- firstpass verify [--file F] [--json]: independently re-derive the hash chain from genesis\n  with NO proxy/DB in the loop; tamper or reorder breaks the chain at its index and exits 1\n- \n[…]\nliance/receipt-audit.md (the auditor workflow)\n- LIVE-PROVEN: 3 real receipts exported, verified clean (exit 0), one-field tamper caught at\n  the exact index (exit 1)\n\n367 tests, clippy -D, fmt clean.",
          "is_bot": false,
          "headline": "feat(cli): receipts as a compliance artifact — firstpass export + ver…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T10:40:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac6af2150537efdc23845fd44685c00fedee1441",
          "body": "… the code is done (#108)",
          "is_bot": false,
          "headline": "docs: GA handoff — the human/clock/credential items that remain after…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T10:23:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3621060d84911499f4c0a4f8dc41e037f153519f",
          "body": "… default-on structured enforce, Thompson bandit, LTT, durable receipts (#107)\n\nRelease summary since 0.1.7 (PRs #95-#106): schema gate + per-gate abstain policy + gate\ncost on receipts; savings/evals CLI + MCP tools + value metrics; structured enforce\ndefault-on with verbatim raw carry + fidelity g\n[…]\nisk); LTT calibration; DR estimator; Thompson start-rung with\nMC propensities + discounting + speculative-deferral band (ADR 0007); durable receipts;\n[[price]] overrides; Grafana dashboard. 365 tests.",
          "is_bot": false,
          "headline": "chore(release): 0.2.0 — verified cascade routing: both wire dialects,…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T10:18:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9eb0069821a4499cdd6098ce5ad0dccc046aa11e",
          "body": "…rs, native MC propensities, speculative-deferral band (ADR 0007) (#106)\n\n- algorithm = \"ucb1\" (default, byte-identical) | \"thompson\": per-(context,rung) Beta\n  posteriors sampled per decision drive the same expected-cost argmin as UCB1; hand-rolled\n  xorshift64* + Box-Muller + Marsaglia-Tsang (no n\n[…]\nes)\n- ADR 0007; example config; roadmap; 6 new tests (sampler correctness, convergence,\n  drift adaptation, propensity-vs-empirical-frequency, band config validation)\n\n365 tests, clippy -D, fmt clean.",
          "is_bot": false,
          "headline": "feat(bandit): Thompson-sampling start-rung — discounted Beta posterio…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T06:15:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "483014ce3d334aa975e656802d8e0ad4c2a1138f",
          "body": "…er backpressure, drains on boot, chain stays valid (#105)\n\n- ReceiptsMode config (default best_effort = byte-identical); durable mode: on channel-full\n  the trace appends synced to <db>.spill.jsonl instead of dropping; writer drains spill at\n  startup + whenever the channel empties, inserting spill\n[…]\n row; roadmap true-up (items shipped\n  in earlier PRs checked)\n\nPartial implementation salvaged from a stopped worktree agent, completed and gate-verified\nby the lead: 359 tests, clippy -D, fmt clean.",
          "is_bot": false,
          "headline": "feat(store): durable receipts — FIRSTPASS_RECEIPTS=durable spills und…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T05:01:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dd102e819c87f0f832fa4dc1a65c2c668c7fbacf",
          "body": "…ld → ACI live tracking → gauges (#104)",
          "is_bot": false,
          "headline": "docs: the self-tuning loop end-to-end — LTT calibrate → serve_thresho…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:46:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26eb608090d938eab94771494373d19b482205f6",
          "body": "…ions (SPEC §M1) (#103)\n\n- New `POST /v1/chat/completions` handler: observe mode transparent passthrough to\n  `upstream_openai`; enforce mode translates the inbound body to `ModelRequest`, runs the\n  escalation engine, and renders the result as an OpenAI `chat.completion` JSON envelope\n  (or `chat.c\n[…]\nelity guard,\n  and two e2e handler tests (plain enforce, stream:true SSE).\n- Docs: ADR 0005 M1 addendum, roadmap checkbox flipped, firstpass.example.toml endpoint\n  note, README endpoint list updated.",
          "is_bot": false,
          "headline": "feat(proxy): OpenAI-compatible inbound endpoint POST /v1/chat/complet…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:42:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f301e2eeb42503105b09577d3a016986fd8e3593",
          "body": "… OPE (#102)\n\nAdds DR = DM(x,a) + w·(r − DM(x,aᵢ)) to `firstpass ope --start-rung N`,\nusing a per-(task-kind, rung) empirical mean as the reward model built from\nthe same propensity-logged receipts. DR is reported next to IPS/SNIPS with\nbootstrap CI (seed 44). Sparse buckets fall back to rung-mean then global\nmean — never NaN.\n\nPhase 2 roadmap item checked. 204 tests pass (4 new DR tests).",
          "is_bot": false,
          "headline": "feat(ope): doubly-robust estimator alongside IPS/SNIPS for start-rung…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:37:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80a5b5d3e983040491caa2f7db4753c4be1f5dfd",
          "body": "… (#101)\n\nAdd `firstpass_core::ltt` — a distribution-free, finite-sample serving-threshold\ncalibrator using fixed-sequence exact-binomial testing (Angelopoulos et al. 2021 /\nRCPS).  Exposed through `firstpass calibrate --method ltt`.\n\nKey decisions:\n- Exact binomial CDF in log-space (log-sum-exp rec\n[…]\nence stopping property, infeasible-on-tiny-n, false_accept_rate correctness,\nand CLI wiring (pairs wrapper + render smoke-test).\n\ndocs/roadmap.md: check LTT calibration half; leave ACI loop unchecked.",
          "is_bot": false,
          "headline": "feat(core+calibrate): Learn-then-Test threshold calibration (Phase 2)…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:33:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1d25a38dcc7a22690af48e8cbf50e579a280b44",
          "body": "* feat(cli+mcp): firstpass evals + MCP get_savings/get_evals — the live eval suite from receipts\n\n- firstpass evals [--json]: per-gate pass/fail/abstain, escalation count, serve-by-rung —\n  computed from the deployment's own receipts, tenant-scoped\n- MCP tools get_savings + get_evals: agents introsp\n[…]\ned value and gate behavior\n  in-context (agent-first constraint, SPEC §0.2)\n\n320 tests, clippy -D, fmt clean; drove the CLI zero-state live.\n\n* test(mcp): tools/list assertion covers the two new tools",
          "is_bot": false,
          "headline": "P3: firstpass evals + MCP savings/evals tools (#100)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:29:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3837802051ce2adfac8799bff8ad7ade536e6535",
          "body": "…ana dashboard (#99)\n\n- [[price]] sections pin the operator's real prices onto the built-in defaults (validated:\n  finite, >= 0, non-blank model) — savings math tracks the contract, not a stale list\n- docs/observability/grafana-firstpass.json: savings/spend/gate-cost stats, realized\n  served-failure vs the 10% target, per-rung served shape, escalations/failures/dropped\n  receipts, enforce p50/p95, spend-vs-baseline over time\n\n318 tests, clippy -D, fmt clean.",
          "is_bot": false,
          "headline": "feat(config+obs): [[price]] per-deployment overrides + committed Graf…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:17:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2a3019184874757b7f6d952620342bc7335dc52",
          "body": "…ified' badge (#98)\n\nNightly + manual workflow: per provider (anthropic/openai/groq/deepseek/openrouter/gemini),\nboot the REAL enforcing proxy with a one-rung ladder, send a tiny live request, assert\n200 + served content + a receipt in the trace store. Jobs self-skip when the secret is\nabsent — skip\n[…]\nd as skipped, never as verified.\n\nscripts/provider-smoke.sh validated live against Anthropic locally (200, 'OK' served,\nreceipt chained) — which also live-verifies the raw-carry enforce path from #96.",
          "is_bot": false,
          "headline": "feat(ci): provider live-smoke matrix — the evidence behind every 'ver…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:12:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a747a2dc977f327bc43614e4de6b3b7cf8d0302",
          "body": "…w reproducible from the repo (#97)\n\nRe-ran the full 974-task MBPP coding benchmark live (2026-07-20): conformal threshold\n0.500 serves 82%, calibrated risk 5.5% (≤10% @ 95% holds), realized served-failure 7.7%.\nREADME numbers now cite the committed artifact instead of prose memory; judged-gate\nartifact follows in the same directory.",
          "is_bot": false,
          "headline": "docs(bench): commit the MBPP live artifact — the headline bound is no…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:09:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a2ed5c544f9233d14efa1fb10bc6923a2cefac1",
          "body": "…mment-ping while routing\n\nA streaming client's connection opens the moment the request arrives; the enforce pipeline\n(model + gates + escalation) runs in a spawned task while the body emits SSE comment\nkeepalives (': firstpass routing', spec-defined to be ignored by every parser) every 5s, so\nno cl\n[…]\nne errors surface as the\nAnthropic SSE error event. Hand-rolled Stream impl, futures-core only (already in tree).\n\n316 tests (paused-time keepalive unit test + e2e SSE sequence), clippy -D, fmt clean.",
          "is_bot": false,
          "headline": "feat(proxy): enforce SSE keepalives — open the stream immediately, co…",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T04:07:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a7e11f08d30af1c54a2e8228a813e55d48690469",
          "body": "…per rung + fidelity guard (ADR 0005 P4/P5) (#96)\n\n- ModelRequest.raw carries the full inbound JSON; anthropic/bedrock/vertex send it\n  verbatim with only model swapped + stream stripped — tools, tool_choice, temperature,\n  thinking, stop_sequences all survive the rung (previously silently dropped o\n[…]\nse transparent fallback\n- enforce_structured defaults TRUE: agent (tool) traffic is gated out of the box\n- ADR 0005 addendum, example config + README updated\n\n314 tests, clippy -D warnings, fmt clean.",
          "is_bot": false,
          "headline": "feat(proxy): structured enforce default-on — verbatim raw-body carry …",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T03:48:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fdca7b8ae6e35a8150854ff2e9f01c9c8d7f5a1b",
          "body": "… gate cost on receipts, savings CLI + value metrics, honest claims (#95)\n\n- [[gate]] schema = {...} now resolves to a runnable SchemaGate (was implemented but unwired)\n- per-gate on_abstain = fail_open|fail_closed (§7.2): a fail-closed gate's abstain blocks\n  serving like a Fail; the receipt still \n[…]\n- README: provider verification status stated plainly; Status reflects code reality;\n  benchmark repro commands that actually reproduce (sim vs live labeled)\n\n310 tests, clippy -D warnings, fmt clean.",
          "is_bot": false,
          "headline": "feat(p0): truth & trust — schema gate wired, per-gate abstain policy,…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-20T03:24:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ab260d29e1b4247ba9efcd2d1dbb33e5af39d1b",
          "body": "…ropensities + IPS/SNIPS (#94)\n\n[escalation.exploration] epsilon: a small fraction of requests start on a\nuniform rung instead of the greedy choice; every receipt records the\nlogging propensity (PolicyRef.propensity, byte-identical when absent) and\nan honest +eps policy stamp. This makes importance-\n[…]\ned-failure with ESS and bootstrap CIs over propensity-logged\ntraffic. Exploration also feeds the bandit rungs it would never visit\ngreedily. DR estimator and SNIPS ratio-bootstrap noted as follow-ons.",
          "is_bot": false,
          "headline": "feat(router+ope): epsilon-greedy start-rung exploration with logged p…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-18T01:18:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c5a6f3bed9abf84286cf1a7f52a67c2836f2a9e1",
          "body": "…zed served-failure (#93)\n\nfirstpass_serve_threshold and firstpass_realized_served_failure update on\nevery adaptive-conformal feedback nudge — the drift-tracking loop is now\nvisible on /metrics, not just in receipts.",
          "is_bot": false,
          "headline": "feat(metrics): live gauges for the adaptive serve threshold and reali…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-18T01:06:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaa678b7c1b1245c21a33f8c021547905b219960",
          "body": "Verified live: releases+installer.sh, PyPI 0.1.7, Docker ghcr, brew tap\n(formula is firstpass-proxy, not firstpass). NOT live: npm, crates.io.\nFixes: brew command corrected everywhere; npm rows/tabs removed; cargo\nshown as --git with toolchain note; crates.io badge -> release badge;\nusage.html availability callout rewritten to current truth; site demo\nnotes it builds from source. README/site/usage/llms.txt now agree.",
          "is_bot": false,
          "headline": "docs: install instructions match verified channel reality (#92)",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-18T00:42:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fc43111b4e9de1da8e9d281dceb22f7807a6b78",
          "body": "…y rehearsal (ope) (#91)\n\nREADME highlights + gates table + vs-predictive synthesis line; usage.html\ngains native-judge and self-consistency gate docs plus the calibrate/ope\nrehearsal story; site roadmap marks the two shipped steps; llms.txt novelty\nlist extended (4)-(6). Status bumped to v0.1.7.",
          "is_bot": false,
          "headline": "docs: science stack — bandit start-rung, self-consistency gate, polic…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-18T00:23:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b91c5a40eb02365c861c68aaac903f135dba2ff0",
          "body": "…ve (#90)\n\nDeterministic UCB1 bandit (Auer 2002) picks the per-request STARTING rung\nfrom (task-kind, prompt-size) context, minimizing expected cost using\nper-rung gate pass-rates learned online from receipts. Prediction only\nchooses where the ladder starts; gating/escalation/serving are untouched,\n\n[…]\nrt = rung 0\nuntil min_observations; warm-started from the trace store on boot; honest\nbandit@v1 policy stamp in receipts; firstpass_bandit_start_rung metric.\nDefault off — [escalation.bandit] opts in.",
          "is_bot": false,
          "headline": "feat(router): learned starting rung — predict to start, verify to ser…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T20:50:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9c4d71372f1614523e90cbd01faf90f04d0345cb",
          "body": "… calibrated confidence (#89)\n\nNew consistency gate type: resample the request k times on a configured\nmodel and score the candidate by agreement (final-answer match + Jaccard),\nconcurrent fan-out, abstain on zero usable samples. Continuous score feeds\nthe conformal serve-threshold machinery. Self-consistency (Wang et al.\n2022) / semantic-entropy family (Farquhar et al. 2024); lexical agreement\nceiling and k-call cost documented honestly.",
          "is_bot": false,
          "headline": "feat(gate): self-consistency uncertainty gate — k-sample agreement as…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T17:30:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6e477c471b588ba75c7361d68b4aae112f33b54",
          "body": "… candidate policy (#88)\n\nfirstpass ope --config candidate.toml: direct-method replay of the trace\nstore against a candidate ladder/serve-threshold. Estimates cost/request\nand served-failure with deterministic bootstrap CIs; coverage-honest\n(unlogged rungs counted unevaluable, never guessed). IPS/DR noted as\nfuture work pending stochastic logging.",
          "is_bot": false,
          "headline": "feat(proxy): off-policy evaluation — replay logged receipts against a…",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T17:14:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bb6def955897ab01f068c1bd8fe578623fa7a5a",
          "body": "docs: positive-only headline — Cheap until proven otherwise.",
          "is_bot": false,
          "headline": "Merge pull request #87 from dshakes/docs/positive-headline",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T15:01:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecba29ba2a3ce47239440fedc6c02c26275ef883",
          "body": "User review: the chiasmus criticized competitors (\"Guessing is expensive\"),\nagainst the repo's own credo (competes on evidence, not adjectives). The\npositive-only four-word take carries the same punch: mechanism-true wordplay\n(cheapest-first, escalate only on proven failure), zero criticism. Applied as\nsite H1 + README tagline; sub-lines unchanged in substance.",
          "is_bot": false,
          "headline": "docs: positive-only headline — \"Cheap until proven otherwise.\"",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T14:59:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9871b437c33fcf371c4f6beb77b4fb6720dd1814",
          "body": "docs: brand headline — Guessing is expensive. Proof is cheap.",
          "is_bot": false,
          "headline": "Merge pull request #86 from dshakes/docs/h1-take",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T14:58:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04ae6f0752ea72e5857393f8c4cf43081bc20283",
          "body": "Top-YC take grounded on the motto (try cheap -> prove it -> escalate only on\nfailure): a six-word chiasmus that indicts predictive routing and prices the\nproduct in the same breath. Applied as the site H1 (two-line split) and the\nREADME tagline for one coherent voice; sub-lines carry the mechanism wordplay —\n\"cheap until proven otherwise\" — plus the honest guarantee.",
          "is_bot": false,
          "headline": "docs: brand headline — \"Guessing is expensive. Proof is cheap.\"",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T14:54:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c66d2e95017f3f18c599078909ccde3d5045a29",
          "body": "docs: universal hero — money + checkmark, zero jargon",
          "is_bot": false,
          "headline": "Merge pull request #85 from dshakes/docs/universal-hero",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T04:03:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99dccbfdfeda5d37a113529c5b5519badaaab1e2",
          "body": "User review: the terminal-transcript hero required reading, and the flow-diagram\nhero required insider knowledge. The new hero is understood by anyone in two\nseconds: YOUR AI BILL $$$$ (struck out) → $ + a shield reading SAME QUALITY,\nguaranteed — with one plain-words line (\"It checks every answer —\n[…]\nnd pays for a\nbig model only when truly needed\") and the honest guarantee caption.\n\nThe terminal transcript (demo.svg) moves down to How it works, where detail\nbelongs. Rendered and visually verified.",
          "is_bot": false,
          "headline": "docs: universal hero — money + checkmark, zero jargon",
          "author_name": "Shekhar Mudarapu",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T04:02:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0b209f8bcacb2f6b74f9b7d29720795cef94abd5",
          "body": "chore(release): 0.1.7 — agentic onboarding + next-gen README",
          "is_bot": false,
          "headline": "Merge pull request #84 from dshakes/release/v0.1.7",
          "author_name": "Shakes",
          "author_login": "dshakes",
          "committed_at": "2026-07-17T03:58:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 17,
      "commits_last_year": 283,
      "latest_release_at": "2026-07-26T03:03:27Z",
      "latest_release_tag": "v0.2.7",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "firstpass-core",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "audit",
            "llm",
            "routing",
            "verification",
            "data-structures"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/firstpass-core",
          "is_deprecated": false,
          "latest_version": "0.2.7",
          "repository_url": "https://github.com/dshakes/firstpass",
          "versions_count": 15,
          "total_downloads": 247,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 82,
          "first_published_at": "2026-07-14T12:33:59.877047Z",
          "latest_published_at": "2026-07-26T02:56:35.840638Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "firstpass-proxy",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "ai",
            "anthropic",
            "llm",
            "proxy",
            "routing",
            "command-line-utilities",
            "web-programming::http-server"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/firstpass-proxy",
          "is_deprecated": false,
          "latest_version": "0.2.7",
          "repository_url": "https://github.com/dshakes/firstpass",
          "versions_count": 15,
          "total_downloads": 182,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 61,
          "first_published_at": "2026-07-14T12:34:27.705011Z",
          "latest_published_at": "2026-07-26T02:57:38.673178Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "firstpass",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "llm",
            "proxy",
            "routing",
            "anthropic",
            "ai",
            "Development Status :: 4 - Beta",
            "Intended Audience :: Developers",
            "Programming Language :: Rust",
            "Topic :: Software Development :: Build Tools"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/firstpass/",
          "is_deprecated": false,
          "latest_version": "0.2.7",
          "repository_url": "https://github.com/dshakes/firstpass",
          "versions_count": 14,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-07-15T15:38:03.160297Z",
          "latest_published_at": "2026-07-26T03:02:28.934565Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 2,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": true,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "crates/firstpass-bench/Cargo.toml",
        "crates/firstpass-core/Cargo.toml",
        "crates/firstpass-proxy/Cargo.toml"
      ],
      "largest_source_bytes": 214155,
      "source_files_sampled": 58,
      "oversized_source_files": 5,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 4296
    },
    "dependencies": {
      "manifests": [
        "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": "firstpass-core",
          "manifest": "crates/firstpass-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "crates/firstpass-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/firstpass-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "reqwest",
          "manifest": "crates/firstpass-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "crates/firstpass-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/firstpass-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "toml",
          "manifest": "crates/firstpass-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "uuid",
          "manifest": "crates/firstpass-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "sha2",
          "manifest": "crates/firstpass-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hex",
          "manifest": "crates/firstpass-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "jiff",
          "manifest": "crates/firstpass-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/firstpass-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "futures-core",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "firstpass-core",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "jiff",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "uuid",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "aes-gcm",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hex",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "argon2",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "axum",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tokio",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "reqwest",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rusqlite",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing-subscriber",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bytes",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "async-trait",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tower",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "governor",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "metrics",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "metrics-exporter-prometheus",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "aws-sigv4",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "aws-credential-types",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "aws-smithy-runtime-api",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "gcp_auth",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "http",
          "manifest": "crates/firstpass-proxy/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 155,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "dshakes",
          "commits": 288,
          "avatar_url": "https://avatars.githubusercontent.com/u/7453460?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "audit.yml",
        "ci.yml",
        "crates-io.yml",
        "docker.yml",
        "npm-publish.yml",
        "pages.yml",
        "provider-smoke.yml",
        "python-wheels.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "25 out of 25 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": 0,
            "reason": "Found 0/25 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 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": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "9fb7340d4988ccb70903070272dba461c50b2465",
        "ran_at": "2026-07-26T03:28:35Z",
        "aggregate_score": 3.5,
        "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-26T03:05:08Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-26T02:55:55Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/dshakes/firstpass",
    "host": "github.com",
    "name": "firstpass",
    "owner": "dshakes"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 35,
        "vitality": 70,
        "community": 27,
        "governance": 54,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 70,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 283,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 3
            },
            "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": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "283 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 283
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 17,
              "latest_release_tag": "v0.2.7",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "17 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 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 ~1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1
                    }
                  }
                ],
                "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": "critical",
        "name": "Community & Adoption",
        "value": 27,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 2,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "at_risk",
            "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": 36,
            "inputs": {
              "packages": [
                "firstpass-core",
                "firstpass-proxy",
                "firstpass"
              ],
              "dependents": null,
              "ecosystems": "crates, pypi",
              "total_downloads": 429,
              "monthly_downloads": 143
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "143 downloads/month across crates, pypi",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 143,
                      "ecosystems": "crates, pypi"
                    }
                  }
                ],
                "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": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 71,
            "inputs": {
              "merged_prs": 155,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "155/156 decided PRs merged",
                "points": 38,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 155,
                      "decided": 156
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/25 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "followers": 7,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "dshakes",
              "public_repos": 46,
              "account_age_days": 4469
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "7 followers of dshakes",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 7,
                      "login": "dshakes"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "46 public repos, account ~12 yr old",
                "points": 24.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 46
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "firstpass-core",
                "firstpass-proxy",
                "firstpass"
              ],
              "ecosystems": "crates, pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "3 package(s) on crates, pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 3,
                      "ecosystems": "crates, pypi"
                    }
                  }
                ],
                "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": "15 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "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": "good",
        "name": "Engineering Quality",
        "value": 81,
        "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": "9 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "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": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "agents",
                "ai-agents",
                "cost-optimization",
                "inference",
                "llm",
                "llm-router",
                "observability",
                "proxy",
                "reliability",
                "rust"
              ],
              "has_wiki": true,
              "homepage": "https://dshakes.github.io/firstpass",
              "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": "https://dshakes.github.io/firstpass",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/25 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no 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 not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "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": 73,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_llms_txt": true,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 4296
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": "llms.txt present",
                "points": 15,
                "status": "met",
                "details": [
                  {
                    "code": "llms_txt_present",
                    "params": {}
                  }
                ],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "crates/firstpass-bench/Cargo.toml",
                "crates/firstpass-core/Cargo.toml",
                "crates/firstpass-proxy/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, crates/firstpass-bench/Cargo.toml, crates/firstpass-core/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, crates/firstpass-bench/Cargo.toml, crates/firstpass-core/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": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "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": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "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 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 95,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 214155,
              "source_files_sampled": 58,
              "oversized_source_files": 5
            },
            "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": "5/58 source files over 60KB",
                "points": 50.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 58,
                      "oversized": 5
                    }
                  }
                ],
                "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",
    "Could not fetch crates package 'firstpass-bench' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index pypi:firstpass@0.2.7; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T03:28:50.288485Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/dshakes/firstpass.svg",
  "full_name": "dshakes/firstpass",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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