Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 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 estrellas⑂ 0 forksdesde jul 2026Ver en GitHub ↗

dshakes/firstpass tiene un índice de salud de 55 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (81/100) y la más baja, Community & Adoption (27/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

55
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

55
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

ShakesCuenta personal
7 seguidores46 repositorios públicosdesde abr 2014

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
crates.iofirstpass-core0.2.78215hace 0 díasauditllmroutingverificationdata-structures
crates.iofirstpass-proxy0.2.76115hace 0 díasaianthropicllmproxyroutingcommand-line-utilities
PyPIfirstpass0.2.7-14hace 0 díasllmproxyroutinganthropicai

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

70Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
2.1/36Cadencia de commits — 3/52 semanas con commits
18/18Volumen de commits — 283 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year283
human_commit_share1
days_since_last_push0
active_weeks_last_year3
Cómo se puntúa
27/27Publica versiones — 17 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~1 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count17
latest_release_tagv0.2.7
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases1

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

27Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 2 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars2
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
28.8/80Descargas mensuales — 143 descargas/mes en crates, pypi
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesfirstpass-core, firstpass-proxy, firstpass
dependents
ecosystemscrates, pypi
total_downloads429
monthly_downloads143
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

54Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38/38.3Aceptación de PR — 155/156 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/25 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs155
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs1
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
6.5/25Alcance del propietario — 7 seguidores de dshakes
24.2/25Trayectoria — 46 repos públicos, cuenta de ~12 años
Datos de entrada utilizados
followers7
owner_typeUser
is_verified
owner_logindshakes
public_repos46
account_age_days4469
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 3 paquete(s) en crates, pypi
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 15 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesfirstpass-core, firstpass-proxy, firstpass
ecosystemscrates, pypi
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

81Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 9 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 25 out of 25 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

100Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://dshakes.github.io/firstpass
10/10Descripción del repositorio
10/10Topics — 10 topics
10/10Wiki
Datos de entrada utilizados
topicsagents, ai-agents, cost-optimization, inference, llm, llm-router, observability, proxy, reliability, rust
has_wiki
homepagehttps://dshakes.github.io/firstpass
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

35En riesgo · 16% del índice global
Cómo se puntúa
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.5Licencia — 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
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,5

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

73Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md
15/15Documentación legible por máquinas (llms.txt) — llms.txt presente
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txt
legible_history_share1
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes4296
Cómo se puntúa
12.6/18Arranque con un solo comando — Cargo.toml, crates/firstpass-bench/Cargo.toml, crates/firstpass-core/Cargo.toml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Rust (tipado estático)
10/10Entorno reproducible — Dockerfile, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesCargo.lock
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
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
Cómo se puntúa
45/45Código verificable por tipos — Rust (tipado estático)
50.3/55Tamaños de archivo manejables — 5/58 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageRust
largest_source_bytes214.155
source_files_sampled58
oversized_source_files5
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

2estrellas de GitHub
1contribuidores
283commits en los últimos 12 meses
0días desde el último push
17versiones publicadas
1factor bus
0issues abiertas
crates.ioecosistemas de paquetes

Advertencias de recopilación de datos

  • 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

Más detalle

OpenSSF Scorecard 3.5 / 10
3.5agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
Dependencias directas 39
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadascrates.io, PyPI.