Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-27 21:23 UTC

orkestrel / contract

TypeScriptMIT★ 0 estrellas⑂ 0 forksdesde jul 2026Ver en GitHub ↗

orkestrel/contract tiene un índice de salud de 40 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es AI Readiness (69/100) y la más baja, Community & Adoption (32/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

40
global / 100
En riesgo

Í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.

40
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

orkestrelOrganización
0 seguidores38 repositorios públicosdesde sept 2025

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npm@orkestrel/contract0.0.731697hace 6 díascontractjson-schemaparserstype-guardstypescriptvalidationzero-dependency

Métricas por categoría

Vitalidad

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

32En riesgo · 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
15.3/18Volumen de commits — 50 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_year50
human_commit_share1
days_since_last_push0
active_weeks_last_year3
Cómo se puntúa
0/27Publica versiones — sin versiones publicadas
0/36Recencia de las versiones — sin versiones
0/27Cadencia de publicación — sin versiones
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

32En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
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 (MIT)
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
46.7/80Descargas mensuales — 3169 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@orkestrel/contract
dependents
ecosystemsnpm
total_downloads
monthly_downloads3169
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?

39En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
11/22.5Distribución de commits — el principal contribuyente firma el 51% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,512
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
0/25Alcance del propietario — 0 seguidores de orkestrel
13.3/25Trayectoria — 38 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_loginorkestrel
public_repos38
account_age_days304
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 6 días
20/20Historial de versiones — 7 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@orkestrel/contract
ecosystemsnpm
any_deprecatedno
min_days_since_publish6

Calidad de Ingeniería

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

53Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

30En riesgo
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
0/10Wiki
Datos de entrada utilizados
topics
has_wikino
homepage
has_readme
has_docs_dirno
has_descriptionno

Seguridad

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

44En 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
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
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
0/5Packaging — sin datos
5/5Pinned-Dependencies — all dependencies are pinned
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
6.8/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate4,4
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, packaging, signed_releases. Los pesos restantes se han renormalizado.

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.

69Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 69 de 80 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,863
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes22.058
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 69 de los últimos 80 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstsconfig.json
agent_commit_share0,863
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
55/55Tamaños de archivo manejables — 0/29 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes50.120
source_files_sampled29
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signal
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 4.4 / 10
4.4agregado

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-27 21:23 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
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
n/dPackagingpackaging workflow not detected
10Pinned-Dependenciesall dependencies are pinned
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
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": [],
      "is_fork": false,
      "size_kb": 831,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Shell": 4925,
        "TypeScript": 586480
      },
      "pushed_at": "2026-07-27T19:46:18Z",
      "created_at": "2026-07-11T15:39:29Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-27T19:46:32Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "orkestrel",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/234677309?v=4",
      "created_at": "2025-09-26T19:21:17Z",
      "is_verified": null,
      "public_repos": 38,
      "account_age_days": 304
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "41386927427cbb49a9c64dcb0f8190f92d33cae7",
          "body": "The ownership marker is stated where it is true — builder- and\ncloneShape-produced nodes, with the pattern accessor rebuilding a fresh\nfrozen RegExp per read — and denied where it is not: a hand-authored\npattern shape Object.freeze cannot own, with cloneShape/createContract\nas the escape. All six guide occurrences aligned; test inventory names\nthe compile-replay proofs.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: scope frozen-means-owned to builder and cloneShape output",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T18:12:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1a360e5c21d1a5b19a69f15727e598bce9255b7e",
          "body": "cloneShape and stringShape capture pattern source and flags and expose\npattern as an enumerable accessor returning a fresh frozen zero-state\nRegExp per read, so RegExp.prototype.compile on the caller's original\nor any previously read copy can no longer drift later reads or newly\ncompiled artifacts. \n[…]\neral for builder- and\ncloneShape-produced shapes; the hand-frozen hand-authored caveat is\ndocumented with its cloneShape escape. 669 core tests.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: accessor-owned pattern snapshots close the RegExp drift hole",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T18:09:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "869fdddc1c01855df2256abc6d9ec064386f7984",
          "body": "A model native to the running harness launches through that harness's\nown agent/workflow mechanism (Claude subagents and Workflows in Claude\nCode, Codex-native agents in Codex sessions, Cursor-native sessions in\nCursor); MCP and CLI transports exist solely to reach a model that is\nnot native to the running harness.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: native-first dispatch law — bridges are cross-provider reach only",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T17:43:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9145fec9638f7f55fea8621379bb8be675a6fc6f",
          "body": "validateShapeDepth row with its all-entry enforcement and honest cost;\nContractCode random split from generate across drawRandom and\ncompileGenerator rows; the ContractError-escape claim scoped to its\ntrue five categories; weighted-interpolation generator defaults;\nstringShape pattern snapshotting; \n[…]\n\nownership note; attempt's isContractError exception; depth-before-cycle\nprecedence; coverage summaries; README shows all five contract outputs.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: parity for the final correctness round",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T17:41:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a7d29e6714d96aa997fe08de4e9ea73b7272cd4e",
          "body": "… depth gates\n\nWeighted interpolation draws guard-valid values across extreme finite\nbounds with span-relative one-sided defaults; cloneShape contains every\nhostile shape-graph read as ContractError code clone; the iterative\nvalidateShapeDepth gate runs at all five compile* entries so no\ntype-valid \n[…]\npt\nexception, drawRandom diagnostics, parseEnum wording, raw defined-value\nwording, and enumerableKeys centralization corrected. 667 core tests.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: overflow-safe generation, total clone containment, and all-entry…",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T17:33:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "35a7ffdb0595fb4ee25b3a3dfa7372a3df782969",
          "body": "Transport is chosen by work class: MCP for short interactive exchanges\nwith immediate thread-id persistence, journaled CLI mandatory for\nlong-running work. Every bench invocation journals under tmp/<bench>/\n(brief file, event stream or tee'd log, final answer) with the journal\nmtime as the liveness \n[…]\ne codex bridge. Plans carry a routing ledger;\nbench substitution requires a recorded bench-dark deviation; session\nstart records bench liveness.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: hybrid bench transport, journal-first law, and routing enforcement",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T17:20:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3a7627a8fdf4383bcea3dd39bb67dcbcbc1d583c",
          "body": "…n parity\n\nliteralOf gains an array-taking overload sharing one SameValueZero\nimplementation with all three compiled literal artifacts (a machine-scale\nenum vocabulary can no longer overflow the spread); ownShape centralizes\nthe frozen-means-owned re-entry idiom at every compile* entry point; the\nsn\n[…]\nse\ndiscloses the generate() widening limit; guide parity restored for\nCOMPILE_DEPTH_LIMIT, enumerableKeys, and drawRandom. 661 core tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: literalOf array form, ownShape ownership leaf, and full campaig…",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T17:00:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fab9c9bc761089f70217d14c252c23d06160c5f9",
          "body": "…tifacts\n\nEvery execution-confirmed defect from the reconciled closing audit:\nparseEnum matches by SameValueZero over an owned Set and survives revoked\nproxies; compiled guard/parser/reporter/inference share one own-enumerable-\nstring-key property view via exported enumerableKeys; every generator\nfa\n[…]\ncompilation with ContractError code\ndepth instead of RangeError; anyOf/oneOf type docs corrected. All fixes\nfailing-first; 650 core tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: guard-parser soundness, generator honesty, and owned compiled ar…",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T16:31:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6fa07e104958d0383a092c4a8cb2661953847fb9",
          "body": "Errors and Cloners sections (ContractError, isContractError, cloneShape,\ncloneSchema), holds, GUARD_DEPTH_LIMIT, GENERATION_ATTEMPT_LIMIT, and\ncanonicalizeValue rows; literalOf corrected to SameValueZero; iterableOf\nrow deleted with arrayOf/setOf/mapOf redirect; jsonShape -> rawShape\nwidening corrections and the restated round-trip law with its limits;\nREADME Node floor >= 22.12.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: guide parity for campaign exports and honest inference semantics",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T15:29:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "89072ae96022b8399e8971e8aaa8377bc70d9259",
          "body": "Nine files failing the tree-wide format:check gate before U6 touched\nanything: CLAUDE.md, .claude/agents/reviewer.md, and seven core\nsource/test files. oxfmt --write only; no semantic change (lint, tsc,\nand src:core tests re-verified green).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: format pre-existing drift across operating docs and core",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T15:17:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "340525e73777d92b4cdb6ad98ba193de40b53d2c",
          "body": "canonicalStringify returns string | undefined (undefined input, cycles,\nhostile traversal — never throws) over an exported ancestor-tracking\ncanonicalizeValue spine. Non-finite numbers infer {} (JSON carries no\nNaN/Infinity); every schemaToShape widening target moves jsonShape ->\nrawShape so the inf\n[…]\nd\nlimits (undefined, Date serialization, sparse holes). Conditional-expect\ntest sites collapsed through a captureContractError narrowing helper.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: honest inference round trip and total canonicalStringify",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T15:17:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f7d6f36d0ef5079642d31f24384eb03f8d407a24",
          "body": "Hardening U5c: cloneSchema is an owned iterative deep clone-and-freeze (memo\nfor shared references and cycles, no structuredClone, no recursion) in\ncloners.ts; rawShape's shallow copy becomes a deep owned snapshot so nested\ncaller mutation cannot reach the shape; literalShape copies its primitive\nvalues with a plain spread; cloneShape's raw case delegates. Core is fully\nhost-independent again - the scoped core typecheck is green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: owned cloneSchema and deep raw-schema ownership",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T14:34:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "272e803a4b7e3d01152c608bfa098a67e4f2b503",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: forbid placeholder wait loops in bridge drivers",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T14:29:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c62da11e9fb6efff3df44afad21714e6fedc1f9c",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: resume inherits session config, rejects sandbox/model flags",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T14:25:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7308cd6630a561fdd1f19db59bc67f5dfa60b60e",
          "body": "U5b continuation: the standalone literalOf combinator matches the compiled\nliteral path (SameValueZero - signed zeros equal, NaN matches NaN); RawShape\nTSDoc states the top-level undefined rejection.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: SameValueZero literalOf and honest RawShape docs",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T14:25:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5f8d6a7c7bf0ba56f5c7deed2a973dfb9ff4d2ea",
          "body": "Hardening U5: compiler entries snapshot caller shapes via cloneShape so\npost-compile mutation cannot drift artifacts; literal matching is\nSameValueZero on the compiled path; raw shapes reject top-level undefined in\nguard/parser/reporter agreement; __proto__ keys are ordinary data across\nschema, guar\n[…]\ningOf/matchOf own stateless regex\nclones; the generator honors one-sided bounds and throws coded 'generate'\ninstead of emitting invalid samples.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: compiled-artifact parity and snapshot ownership",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T14:19:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8673eda9386d24dc33506e25c0803912423d33ab",
          "body": "Cursor CLI installed and authenticated; CURSOR_GROK_MODEL pinned to\ncursor-grok-4.5-high from agent models. Cursor is an MCP client only, so\n.cursor/mcp.json (project-level, editor+CLI shared) registers the codex and\nclaude servers - Grok sessions reach Sol and Opus tool-natively. Scaffold\nblueprint gains the .cursor/mcp.json host row for propagation.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: light the Grok bench and register the Cursor-side MCP inverse",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T14:11:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1f88bc151a0525c753ff22c1c705055ae133a9af",
          "body": "Prefer mcp__codex__codex/codex-reply when loaded (native progress streaming,\nsession continuation); journaled CLI stays the fallback. Project MCP servers\nauto-enable so the wiring works headless including Claude Code Cloud. The\ninverse is registered in codex global config: claude mcp serve exposes Claude\nCode as MCP tools for Codex-primary sessions.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: MCP-first codex transport and inverse claude bridge",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T13:50:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f593738026eb0c519ae970120a099a6e5b61f3bd",
          "body": "Hardening U4: builders validate bounds and reject flagged patterns with coded\nContractError; every built shape is a frozen copy of caller input; new\ncloners.ts cloneShape snapshots shape graphs DAG-preserving and frozen;\nvalidateShape detects cycles with coded errors instead of stack overflow;\nGUARD_DEPTH_LIMIT bounds lazyOf recursion by design.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: shape validation, immutability, cycles, and depth policy",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T13:28:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9fa6bce333a8bcab317e2baba41c0b4c4363b313",
          "body": ".mcp.json wires codex mcp-server into Claude Code so the bench is also\nreachable as first-class tools with UI-streamed progress; the journaled CLI\nprotocol remains the default for bench dispatches. Scaffold blueprint gains\nthe .mcp.json host row so the wiring propagates to every package.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: register Codex as a project MCP server",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T13:07:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1dc62aebfd2ebcc2853972ac53ce0e3f43839044",
          "body": "Every bench run streams its JSONL event log to tmp/codex/<unit>.jsonl for\nlive tailing, hands off the final answer via --output-last-message, records\nthe session id, and continues follow-ups with codex exec resume - progress\nvisibility and dialogue without polling.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: journaled, resumable codex communication protocol",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T12:55:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ec6b88e3a474edad3162adad123e243e26cdd6b6",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: drop turn budgets from remaining roles",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T12:51:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0cc68ca56cd260ca07a1a1bf7e65d35e0f1f76a0",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: keep subjective/objective engine descriptors",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T12:51:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d669b9b02db10f32019679c44c98fa247ae3fdfb",
          "body": "Loosen the permission floor per user policy: agents run autonomously with no\nturn budgets or routine approval gates; only genuine security and destruction\nrisks stay constrained (sensitive-read deny families). Add the native Opus 5\nimplementer role and Codex-side opus bridge as the subjective mirror\n[…]\nne fits. Bridges are patient: one foreground exec, generous timeout,\nverify after, never poll or kill. Policy test aligned to the loose posture.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: autonomous agent posture and mirrored Opus implementer",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T12:50:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ff61c0fee78154f39828dc29d3e0e8467d5c4894",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: drop worktree pin from application role",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T12:34:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d61f61d8369ae7935c00bc1e6a21a6eb3f2f0966",
          "body": "Writers run in the main checkout as the sole serial writer from a clean\ncommitted baseline; git checkpoints are the rollback mechanism. Mirrored to\nthe scaffold repo for the next release.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: replace worktree isolation with serial main-checkout discipline",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T12:33:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "34ec244429e5da412c80e9b5b4ee06bbdcfbacab",
          "body": "Hardening U3: every guard body is containment-pure via holds; combinator\ncallbacks and parser element guards can no longer escape a throw; iterableOf\nis removed (a guard that consumes or caps an iterable is unsound - use\narrayOf/setOf/mapOf); sparse arrays are invalid everywhere; exactness checks\nsee non-enumerable own keys; systematic hostile-input sweep proves totality.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: guard, combinator, and parser totality",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T12:33:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b844a65e9f2d836778b6b958d8a03aaaccdc9cc3",
          "body": "…ixtures\n\nHardening U1+U2: attempt() contains its own reason normalization so no\nhostile thrown value escapes the boundary; holds() is the shared guard-body\ncontainment idiom; errors.ts introduces the coded ContractError contract\nwith isContractError; tests/setup.ts gains the hostile-input fixture corpus.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: total exception boundary, holds idiom, ContractError, hostile f…",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T11:37:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "457412114416d3948f3af6bdef5e8c65dfbbc87b",
          "body": "Fix exactOptionalPropertyTypes fallout in shapers/compilers/combinators via\nnarrowing and conditional spreads; restore plain star barrel row for types;\nhoist isJSONValue's recursive closure into exported matchesJSONValue built on\nthe shared guards; author the tests/policy.test.ts gate; teach the pol\n[…]\nnd AGENTS.md and architecture.md to name the\nreturned-function exception; document matchesJSONValue and absent-key shape\nsemantics in the guide.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: policy gate, inferers kind, and exactOptional conformance",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T02:06:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d0a1574e373ffb532d643a6a0035a6c11e6e0c0c",
          "body": "Adopt the 0.0.3 host bundle (AGENTS.md, CLAUDE.md, .claude rules/skills/agents,\n.codex, .agents skills, scripts, oxlint config, vendored scaffold guide,\ntests/setupPolicy.ts), regenerated computed configs, prune retired agent roles,\nand sync manifest pins. Scaffold range stays ^0.0.3 (canonical self-range is\n^0.0.2) - accepted audit residual.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: migrate to scaffold 0.0.3 baseline",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-27T00:04:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2cdf5679335a90efdb4f31d3239a3beb22b4bc51",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LDMxopaDkrK4SCXE5wS7iX",
          "is_bot": false,
          "headline": "chore: sync lockfile version for 0.0.7",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-21T02:14:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "19340ce41f349c4987087194fbf0221d4f8dc271",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LDMxopaDkrK4SCXE5wS7iX",
          "is_bot": false,
          "headline": "chore: release 0.0.7",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-21T02:13:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5e28799c30e15ed405b2210bfec197c148600d37",
          "body": "Add schemaToShape(schema: JSONSchema): ContractShape, the validating\nsibling of rawShape and inverse of compileSchema: a runtime JSON Schema\nvalue becomes a shape that plugs into createContract for parse, is,\nexplain. Keyword precedence is enum, then oneOf/anyOf, then type, then\nobject inference, wi\n[…]\nd cycle tracking, per-call\nmemoization, and null-prototype accumulators.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LDMxopaDkrK4SCXE5wS7iX",
          "is_bot": false,
          "headline": "feat: schemaToShape inverts JSON Schema back into runtime validation",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-21T02:06:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9415d025dfce6b5f22d7d1a2f4980e5714618674",
          "body": null,
          "is_bot": false,
          "headline": "Update package.json",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-21T00:26:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0edb249debc61132e2644d2b50671ebe1760327",
          "body": "…dity\n\nClose every defect confirmed by a five-lens adversarial audit (security,\nJSON Schema conformance, performance, docs honesty, test gaps):\n\n- Totality: inferArray's whole walk — including the length read — now\n  runs inside attempt, so throwing getters and hostile Proxy-over-array\n  traps yield\n[…]\nn\ndecisions for the ten audit hypotheses the judge struck as defensible.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LDMxopaDkrK4SCXE5wS7iX",
          "is_bot": false,
          "headline": "fix: production hardening of value inference — totality, bounds, vali…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-20T22:53:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c8f5af19fcb07bfe85898ff3b04930e35b822103",
          "body": "…wrapper\n\nGrow value inference toward the API-to-MCP bridge. The emitted schema\ntravels verbatim through schemaToParameters -> createTool -> the MCP\ninputSchema wire into the model's context, so inference now recovers the\nsemantic keywords that journey preserves:\n\n- JSONSchema gains the format keywo\n[…]\nreateTool to MCP\n  inputSchema) with output verified against a real run.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LDMxopaDkrK4SCXE5wS7iX",
          "is_bot": false,
          "headline": "feat: format and enum inference, Date promotion, and MCP object-root …",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-20T22:00:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4b52417a97a0f66e59b49f6433aeb8c84a500808",
          "body": "Add the reverse direction of compileSchema: valueToSchema walks an\nunknown JSON value or plain JS object and emits the existing JSONSchema\nartifact, and samplesToSchema unifies many example values (e.g. database\nrows) into one schema with required-vs-optional inferred across samples.\n\nInference is r\n[…]\nng schemaToParameters -> createTool -> MCP inputSchema bridge\nunchanged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LDMxopaDkrK4SCXE5wS7iX",
          "is_bot": false,
          "headline": "feat: infer JSON Schema from opaque runtime values",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-20T21:16:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "91029881b98084a2ba96deec9276a8f494680e99",
          "body": "Replace @src self-imports in guides/src/contract.md with @orkestrel/contract forms and carry the fleet canon sync (AGENTS.md §22, scaffold.md mirror).\nRegenerate package-lock.json in sync with package.json (playwright browser stack was missing from the lock).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01VasWdpCkA8JujgPD3Y6dfj",
          "is_bot": false,
          "headline": "docs: guide fences import the published specifier",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-20T05:38:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d69042e234a2f8fb7ef1b8eb3a6cb66b73f5f2d1",
          "body": "The devDependency re-pins ^0.0.2, the generated manifest and configs\nregenerate to compiler canon, and the vendored scaffold guide catches up\nto the 0.0.2 host. The package now audits clean end to end.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "chore: true canon to scaffold 0.0.2 — audit is green",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-20T03:28:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e41e71a2ac29f1a1f3e23c5ae554b29cb0f6470d",
          "body": "…repair\n\nfleet deliberately never writes ci.yml (two repos carry customized CI);\nrepair is the documented per-repo path that trues it everywhere else.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "chore: true ci.yml and residual shared files from canon via scaffold …",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-20T01:42:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "76582f754e733218ae5366a02f8e10e81fd0ce8d",
          "body": "…evDependency\n\nThe published @orkestrel/scaffold now vendors the line's shared set —\nincluding its own guide — and every repo runs it via the scaffold script.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "chore: true shared artifacts from scaffold 0.0.1; wire the scaffold d…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-20T01:37:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6dba12008e42c953aaa50a4711818955bec8d1c",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "fix: YAML-safe agent frontmatter — quote every description scalar",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-19T18:19:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ed0311702f64b10680bef37ee0272accb0f7255d",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "docs: adopt the revised AGENTS.md — the no-nested-functions law",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-19T15:33:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c4908139a6673a93a8b4446ecae6a2bf092c2caa",
          "body": "Folds the composer/grok scope tightening from the markdown repo's main\ninto the canonical mirror (CLAUDE.md + builder/composer/grok agents),\nreworded for the retired scaffold tooling.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "docs: adopt delegation-policy tightening in the mirrored doc set",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-19T15:00:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "62600cf3b49205c9367fbcb5160201d5cb25d482",
          "body": "…orkestrel/scaffold\n\nScaffolding, fleet mirroring, and the repo-anatomy spec now live in the\n@orkestrel/scaffold package (scaffold new/sync/audit/repair/mirror, with\nthe canonical host artifacts vendored in its dist/host). The scaffold npm\nscript now targets the installed bin; the devDependency lands once the\npackage publishes.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "chore: retire scaffold.sh, mirror.sh, and SCAFFOLD.md — replaced by @…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-19T14:54:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "27dc8f14164b1d9de259d17b69df96c4716f691a",
          "body": "Every scaffolded package ships SCAFFOLD.md; the inventory omitted the\nrow for its own file.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "docs: list SCAFFOLD.md in its own §3 byte-copy inventory",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-19T01:20:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a9cb8b752fc01fa6e21524320da16e2ca794b3ab",
          "body": "Align SCAFFOLD.md toolchain pins, canonical scripts block, inventory,\nand gate notes with the live siblings, and add the scaffold fast-path\ncallout. Teach the orkestrel agent the 36-repo catalog (brief\nscaffolded, unpublished) and the scaffold/mirror tooling. Add\nscripts/mirror.sh - the repo-resident, dry-run-by-default mirror for\nthe shared orchestration set.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "docs: refresh SCAFFOLD.md, update orkestrel agent, add mirror.sh",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-19T00:28:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8e0315b5036ae777c4eb45307efffc8e5bd70f69",
          "body": "The live siblings ship engines.node >=22 (only terminal wants >=24 at\nruntime); update the scaffold reference's example blocks and invariant\ntable to match, per its own siblings-win rule.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "docs: align SCAFFOLD.md engines to Node >=22",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-19T00:00:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "68f8df3f486f2c65dcbec339121751124b38cf0a",
          "body": "Adopt the line-wide package scaffolder from @orkestrel/ollama and add\nthe scaffold entry to package.json scripts.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "chore: mirror scaffold.sh and wire npm run scaffold",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-18T23:43:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "df9493b44252fe28f03023dd5e843f3342524f31",
          "body": "Mirror the canonical orchestration files from @orkestrel/ollama: the ten\nrole agents (incl. the composer/grok external dispatchers and orkestrel\nv4), the SessionStart hook set (deps/ollama/cursor with the repo-guarded\ndaemon boot), and the evolved CLAUDE.md, AGENTS.md, and SCAFFOLD.md.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "chore: adopt line-wide orchestration set from ollama",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-18T22:54:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "678000220a6991db37af98fc4af8fa8e0602345b",
          "body": "…sh lesson\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "Update orkestrel agent: publish-verification step and dist-less-publi…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-18T19:17:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e991e4bfa144057dd8aa46e7aa69bd1515750db7",
          "body": "Line-wide knowledge base: 35-package catalog by dependency layer, repo scaffold\nanatomy, audit checklist, release recipe, vendored-guides law, and campaign\nconventions — so sessions dispatch the expert instead of re-scouting.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TJPNmo3cDJfxjvkRvyUUYt",
          "is_bot": false,
          "headline": "Add orkestrel package-management expert agent; register it in CLAUDE.md",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-18T18:14:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "25a5f8c6e5e52e81f6c93d079430330a73c68b73",
          "body": null,
          "is_bot": false,
          "headline": "Update package-lock.json",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-18T09:39:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa4f70d765dd8cafdeb356fc5a60334a0ad38d6e",
          "body": "createContract gains explain(value): readonly Fault[] — an opt-in walker\nthat tells a consumer where and why a parse would fail: a discriminated\nfault union (type, missing, constraint, variant, oneOf) carrying the field\npath, the expected shape kind, and bounded value previews, always\nJSON-serializa\n[…]\nrence guard with a\nwide-additionalProperties type oracle. Version 0.0.5.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017cEb65n2DvKCAkd8KfngDw",
          "is_bot": false,
          "headline": "Add structured parse-failure reporting",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-18T09:18:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6aeecb8d78dc59361ee879712f4bfc2d1088b0b1",
          "body": null,
          "is_bot": false,
          "headline": "v0.0.4",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-18T08:46:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ccdd768cc9d9dee49917d99d6cb258b5d6f0546",
          "body": "The definitive hardening round. Infer's object branch, InferIndex, and\nInferOpenIndex become non-distributive so a wide additionalProperties\nparameter flows once instead of fanning into a fourteen-member union at\nevery nesting level — the artifact behind every downstream\ninstantiation-depth failure;\n[…]\n reviewed, and consumer-smoked against\ndatabase and tool. Version 0.0.4.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017cEb65n2DvKCAkd8KfngDw",
          "is_bot": false,
          "headline": "Depth-robust inference, total guards, and drift-free oneOf",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-18T08:26:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "25b0b77b28de8bb08d191793fec74964c298ccaa",
          "body": null,
          "is_bot": false,
          "headline": "Update package-lock.json",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-18T05:52:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fabdacd141102bcdde043926a60cbcc09e6caef0",
          "body": "Full type-level overhaul (zero runtime change): ObjectShape gains a generic\nadditionalProperties parameter threaded through objectShape and recordShape,\nand Infer now reads it — record shapes infer Readonly<Record<string, V>>,\nopen shapes carry an unknown-typed index, and mixed shapes keep named\npro\n[…]\nmers no longer need re-narrowing workarounds\nafter parse. Version 0.0.3.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017cEb65n2DvKCAkd8KfngDw",
          "is_bot": false,
          "headline": "Make static inference match runtime delivery across the shape surface",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-18T05:28:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "58a608c4c1a4b32f8ec422fcdd8a9bc31ad0a5a5",
          "body": null,
          "is_bot": false,
          "headline": "v0.0.2",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-17T22:05:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c8900ef0e420373a88a079366cba83cdba19813",
          "body": "OptionalFromGuards represented optional keys as required properties\nwith undefined unioned into the value, so a guarded record's static\ntype claimed every key was present while the runtime accepted absent\nkeys. Replace it with the two-part mapped intersection under Readonly\nthat InferObject already \n[…]\nh\noptional members and safe under exactOptionalPropertyTypes downstream.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017cEb65n2DvKCAkd8KfngDw",
          "is_bot": false,
          "headline": "Type optional record keys with true ? modifiers",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-17T21:43:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f1be18661a4613bca164c3329e0acde79373e7e1",
          "body": "….0.2)\n\nAn inline object literal passed to enumOf widened its values, producing\nGuard<string> instead of the literal member union — enumOf({ Up: 'up' })\ncould not narrow a guarded value to 'up'. Add the const modifier to the\nvalues type parameter so object literals infer their literal union while\nna\n[…]\nliteral tuples correctly\ntoday, so they are locked rather than modified.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017cEb65n2DvKCAkd8KfngDw",
          "is_bot": false,
          "headline": "Sharpen enumOf inline-object inference with a const type parameter (0…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-17T20:52:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4c4d64646053d68c9c78b5791ec35e1c54282a09",
          "body": "The validated, byte-consistent recipe for creating a new @orkestrel\npackage or fixing an existing one: canonical configs per variant\ncombination (core/browser/server and the single-surface affordances),\nexports shapes, the multi-surface types-field rule, the plugin-only\ndeclaration pipeline, guides parity wiring, and the audit checklist.\nIdentical copy in every repo.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01UR1VhRDP3i84mdtDs2CaB7",
          "is_bot": false,
          "headline": "Add SCAFFOLD.md — the package scaffolding reference",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-13T15:52:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d5e8530a44053fa24bcf35af207c0f3d2ab72f1b",
          "body": "PR-triggered ci job on Node 24 running the full gate chain\n(format:check, lint:check, check, check:src, build, Playwright\nchromium install, test).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01UR1VhRDP3i84mdtDs2CaB7",
          "is_bot": false,
          "headline": "Update CI workflow to the standardized pipeline",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-13T13:23:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9193be3060b01e333a9fbdcbe1780bcb33ddc6bd",
          "body": "Add --no-cache to test:src, add test:src:core, and adopt the canonical\nvite.core.config.ts (externalizes node:*/@orkestrel/*; no-op for this\nzero-dependency package).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01UR1VhRDP3i84mdtDs2CaB7",
          "is_bot": false,
          "headline": "Align test scripts and core build config with router baseline",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-13T03:36:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "548322e420ac6485bda65c2e74053c5931b20e0c",
          "body": "Each core and server face now emits index.js (ESM) + index.cjs (CJS) with\na require condition added to exports (types-first, import before require,\nESM default) and dual .d.ts/.d.cts declarations; any browser face remains\nESM-only. Verified: require() and import() both resolve for every face in\nits \n[…]\n; check + tests green; arethetypeswrong green on\nnode16/CJS/ESM/bundler.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016TTHoq3bEG3kNMLEmWuRcF",
          "is_bot": false,
          "headline": "Ship core face as dual ESM+CJS (ESM default); browser stays ESM-only",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-13T01:04:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c2fade4245d03b63532f24226dece859540f22af",
          "body": "Output is deterministic only when a seeded RandomFunction is supplied;\nthe example comment no longer implies otherwise.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016TTHoq3bEG3kNMLEmWuRcF",
          "is_bot": false,
          "headline": "Clarify the compileGenerator example wording on determinism",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-12T06:00:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0ec183ba1cb032125de956e41b4ff07e94bf3e85",
          "body": "tests/guides/src/parity.test.ts runs @orkestrel/guide's full check set\nas a guides vitest project chained into npm test. First live run caught\ngenuine drift: Success and Failure were documented as type but declared\nas interface - the kind-aware bijection working as designed - now\ncorrected in the gu\n[…]\nclass case degrades\nsafely through the drop-in's entity-name convention.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016TTHoq3bEG3kNMLEmWuRcF",
          "is_bot": false,
          "headline": "Adopt the guides-parity suite, close examples debt, fix kind drift",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-12T05:56:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "01080314e9ce2397e76e7964e0e03744aa731dc9",
          "body": null,
          "is_bot": false,
          "headline": "Add guide",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-12T05:37:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f94722a9dd0728f1f5478349e83bef3639030e24",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016TTHoq3bEG3kNMLEmWuRcF",
          "is_bot": false,
          "headline": "Apply format sweep table reflow in the guide index",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-11T21:16:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "da475d2a1d2d68a201d475933caf03981778ebb5",
          "body": "Guide title and prose, guide index cell, and package keyword now say\n\"contract\" (singular), matching the package and repo name.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016TTHoq3bEG3kNMLEmWuRcF",
          "is_bot": false,
          "headline": "Correct remaining plural naming leftovers from the contracts rename",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-11T20:46:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a6403a73a319548bd03cf0c6e0ad261c99767c3c",
          "body": null,
          "is_bot": false,
          "headline": "Fix tests",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-11T20:15:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d9cae70a817f516a360c9e0ee06d16439818318",
          "body": null,
          "is_bot": false,
          "headline": "Refactor from contracts to contract",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-11T20:06:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7028ec388952152bcf59099573db9555fa86a4fb",
          "body": "Infer is a distributive conditional over the 12-member ContractShape\nunion, and five members (array/object/union/optional/nullable) default\ntheir inner generic back to the whole union — so Infer<ContractShape>\nis a type-level fixed point that can never shrink, and anything forcing\nits eager expansio\n[…]\neen: format:check, lint:check, check, check:src, build,\ntests (296/296).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MU2dfTqj79m1xFNtmvuS5N",
          "is_bot": false,
          "headline": "Bail out Infer of the full widened ContractShape union to unknown",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-11T19:46:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "965ea16f4c7ff5678b6efcaa2457f22e270d9d00",
          "body": "…, totality hardening\n\nRigorous per-file fidelity audit of src/core against the contract vision:\nfour lockstep outputs per shape, byte-for-byte JSON roundtrips, total\nguards/parsers, lazy recursion via combinators, primitives only.\n\nNew primitives — JSON is now fully first-class:\n- NullShape/nullSha\n[…]\nide updated with all 12 new surface rows and corrected\nbehavior wording.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MU2dfTqj79m1xFNtmvuS5N",
          "is_bot": false,
          "headline": "Complete the primitive matrix: null/json shapes, fail-fast validation…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-11T19:14:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cfd0804b603b171bb7a1c5c6d595aa2b98f27a5a",
          "body": "Shaper type enforcement: the generic shapers (literalShape, arrayShape,\nobjectShape, recordShape, unionShape, oneOfShape, optionalShape,\nnullableShape) returned custom inline object types instead of the\ninterfaces in types.ts, so nothing enforced conformance to\nContractShape. The six wrapping interf\n[…]\neen: format:check, lint:check, check, check:src, build,\ntests (149/149).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MU2dfTqj79m1xFNtmvuS5N",
          "is_bot": false,
          "headline": "Enforce types.ts returns in shapers, ESM-only packaging, safe prepublish",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-11T17:54:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "41f421e2eb498e6d5cf725540aa7745fa3cddec3",
          "body": "…github.com/orkestrel/contracts into claude/orkestrel-foundation-cleanup-rytvez",
          "is_bot": false,
          "headline": "Merge branch 'claude/orkestrel-foundation-cleanup-rytvez' of https://…",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-11T17:02:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5db6e720b05a49b8d12a6d3bfba2a253ffce04f6",
          "body": null,
          "is_bot": false,
          "headline": "Add CI, update package-lock.json",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-11T17:00:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "000c3dae4ff02e7c98a027b93f03332fee265c90",
          "body": "API surface prune — a usage audit showed 11 of 16 public helpers had\nzero internal use, zero tests, and zero documentation (utility leftovers\nfrom the source project): remove isSuccess, isFailure, formatField,\nsetField, omitUndefined, cloneValue, freezeValue, escapeRegExp,\ncreateDeferred, interpolat\n[…]\ns.\n\nGates green: format, lint, check, check:src, build, tests (149/149).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MU2dfTqj79m1xFNtmvuS5N",
          "is_bot": false,
          "headline": "Prune unused helpers, add MIT license, fix generator soundness",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-11T16:52:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f489c35d2a0e512d663ceb1870b7e6486eb8e74a",
          "body": "The repo was seeded from an older project (\"terrain\") and still carried\nits identity and context. Rebrand everything to the standalone,\nzero-dependency @orkestrel/contracts package:\n\n- guides/src/contracts.md: flatten stale src/core/contracts source paths\n  to src/core, drop a dead parity-test link,\n[…]\n.md mandates)\n\nGates green: format, lint, check, build, tests (146/146).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MU2dfTqj79m1xFNtmvuS5N",
          "is_bot": false,
          "headline": "Clean up old-project residue for the @orkestrel/contracts foundation",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-11T16:24:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "27af1f0256de9c18edd7562fdd7cc520cc88c79c",
          "body": null,
          "is_bot": false,
          "headline": "Initial commit",
          "author_name": "mikesaintsg",
          "author_login": "mikesaintsg",
          "committed_at": "2026-07-11T15:39:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 0,
      "commits_last_year": 50,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 3,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 25,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@orkestrel/contract",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "contract",
            "json-schema",
            "parsers",
            "type-guards",
            "typescript",
            "validation",
            "zero-dependency"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@orkestrel/contract",
          "is_deprecated": false,
          "latest_version": "0.0.7",
          "repository_url": "https://github.com/orkestrel/contract",
          "versions_count": 7,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3169,
          "first_published_at": "2026-07-11T20:14:54.079000Z",
          "latest_published_at": "2026-07-21T02:20:22.916000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 50120,
      "source_files_sampled": 29,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 22058
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "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": [
        "npm"
      ],
      "dependencies": [],
      "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": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "mikesaintsg",
          "commits": 41,
          "avatar_url": "https://avatars.githubusercontent.com/u/45922630?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 39,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.512
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 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": null,
            "reason": "no pull request found",
            "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/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 10,
            "reason": "all dependencies are pinned",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 9,
            "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": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "41386927427cbb49a9c64dcb0f8190f92d33cae7",
        "ran_at": "2026-07-27T21:23:04Z",
        "aggregate_score": 4.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T19:46:59Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/orkestrel/contract",
    "host": "github.com",
    "name": "contract",
    "owner": "orkestrel"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 40,
      "inputs": {
        "security": 44,
        "vitality": 32,
        "community": 32,
        "governance": 39,
        "engineering": 53
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 32,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "commits_last_year": 50,
              "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": "50 commits in the last year",
                "points": 15.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "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": "critical",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "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 (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 58,
            "inputs": {
              "packages": [
                "@orkestrel/contract"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3169
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,169 downloads/month across npm",
                "points": 46.7,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3169,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 39,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.512
            },
            "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 51% of commits",
                "points": 11,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 51
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "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": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "orkestrel",
              "public_repos": 38,
              "account_age_days": 304
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of orkestrel",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "orkestrel"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "38 public repos, account ~0 yr old",
                "points": 13.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 38
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@orkestrel/contract"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "7 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 53,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 30,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 44,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 44,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 4.4
            },
            "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "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": "moderate",
        "name": "AI Readiness",
        "value": 69,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.863,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 22058
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "69 of 80 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 69,
                      "sampled": 80
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.863,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "69 of the last 80 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 69,
                      "sampled": 80
                    }
                  }
                ],
                "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": "all dependencies are pinned",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 50120,
              "source_files_sampled": 29,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/29 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 29,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "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": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T21:23:09.149867Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/orkestrel/contract.svg",
  "full_name": "orkestrel/contract",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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 agregadasnpm.