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

lemmaoracle / lemma

Give AI proven facts — a cryptographically verified truth layer for agent AI, built on ZK proofs, selective disclosure, and on-chain provenance.

Astro · TypeScript · HTMLLicencia propia★ 1 estrella⑂ 1 forkdesde feb 2026Ver en GitHub ↗

lemmaoracle/lemma tiene un índice de salud de 55 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (85/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.

55
global / 100
Moderado

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

lemmaoracleOrganización
1 seguidor8 repositorios públicosdesde feb 2026

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@lemmaoracle/mcp0.0.23129621hace 8 días
npm@lemmaoracle/sdk0.1.1241340hace 0 días
npm@lemmaoracle/seal0.3.8164915hace 8 díaslemmasealauthzkcircuitsign-in
npm@lemmaoracle/spec0.1.0270936hace 0 días
npm@lemmaoracle/agent0.0.3591514hace 8 díaslemmaagentidentitycredentialauthorityschemawasm

Métricas por categoría

Vitalidad

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

48En riesgo · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
15.2/36Cadencia de commits — 22/52 semanas con commits
18/18Volumen de commits — 1281 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year1281
human_commit_share1
days_since_last_push0
active_weeks_last_year22
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 — 1 estrellas
0/25Forks — 1 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks1
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
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
52.7/80Descargas mensuales — 8982 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@lemmaoracle/mcp, @lemmaoracle/sdk, @lemmaoracle/seal, @lemmaoracle/spec, @lemmaoracle/agent
dependents
ecosystemsnpm
total_downloads
monthly_downloads8982
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?

59Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
9.6/22.5Distribución de commits — el principal contribuyente firma el 57% de los commits
5.4/13.5Amplitud de contribuyentes — 4 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 5 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled4
top_contributor_share0,572
Cómo se puntúa
37.4/46.8Resolución de issues — 80% de issues cerradas
36.7/38.3Aceptación de PR — 680/709 PR decididos fusionados
1.5/15OpenSSF Scorecard: Code-Review — Found 3/30 approved changesets -- score normalized to 1
Datos de entrada utilizados
merged_prs680
open_issues1
closed_issues4
issue_closed_ratio0,8
closed_unmerged_prs29
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
2.2/25Alcance del propietario — 1 seguidores de lemmaoracle
7.8/25Trayectoria — 8 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers1
owner_typeOrganization
is_verified
owner_loginlemmaoracle
public_repos8
account_age_days163
Cómo se puntúa
25/25Publicado y resoluble — 5 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 40 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@lemmaoracle/mcp, @lemmaoracle/sdk, @lemmaoracle/seal, @lemmaoracle/spec, @lemmaoracle/agent
ecosystemsnpm
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

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

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://lemma.frame00.com/
10/10Descripción del repositorio
10/10Topics — 10 topics
0/10Wiki
Datos de entrada utilizados
topicsai-agents, did, provenance, rag, selective-disclosure, trusted-web, typescript, verifiable-ai, zero-knowledge-proofs, zk
has_wikino
homepagehttps://lemma.frame00.com/
has_readme
has_docs_dir
has_description

Seguridad

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

49En riesgo · 16% del índice global
Cómo se puntúa
6/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.2/2.5CI-Tests — 23 out of 24 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 3/30 approved changesets -- score normalized to 1
2.5/2.5Contributors — project has 5 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
0/7.5Vulnerabilities — 134 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,2
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
7.5/25Dependencias indirectas libres de avisos conocidos — 3 afectados: brace-expansion 2.1.2 (high 7.5), underscore 1.13.6 (high 7.5), @hono/node-server 1.19.17 (moderate 5.9)
33.7/40Sin avisos pendientes — 1 paquete(s) con avisos sin atender más allá de 90 días; el más antiguo publicado hace 148 días
Datos de entrada utilizados
sourceosv
advisories3
affected_packages3
assessed_packages198
unassessed_packages0
affected_by_severityhigh 2, moderate 1
direct_affected_packages0
Se cotejó el cierre de dependencias en tiempo de ejecución de npm:@lemmaoracle/mcp@0.0.23 —lo que arrastra la instalación del paquete publicado—: 198 paquetes. No se analiza la alcanzabilidad.

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.

77Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .cursorrules, AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 97 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,97
agent_instruction_files.cursorrules, AGENTS.md, CLAUDE.md
agent_instruction_max_bytes772
Cómo se puntúa
12.6/18Arranque con un solo comando — packages/agent/Cargo.toml, packages/agent/normalize/Cargo.toml, packages/canonical-sort/normalize/Cargo.toml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.js
11/11Verificación estática de tipos — packages/agent/tsconfig.json, packages/blog-article/circuits/tsconfig.json, packages/canonical-sort/tsconfig.json, packages/content/circuits/tsconfig.json, packages/content/tsconfig.json, packages/data-commitment/tsconfig.json, packages/demo/tsconfig.json, packages/feeds/tsconfig.json, packages/fetcher/tsconfig.json, packages/mcp/tsconfig.json, packages/parser/tsconfig.json, packages/passthrough/tsconfig.json, packages/relay/tsconfig.json, packages/sdk/tsconfig.json, packages/seal/tsconfig.json, packages/spec/tsconfig.json, packages/trust402/tsconfig.json, packages/web/tsconfig.json, packages/x402/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 26 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesCargo.lock, package-lock.json, pnpm-lock.yaml
has_dockerfile
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configspackages/agent/tsconfig.json, packages/blog-article/circuits/tsconfig.json, packages/canonical-sort/tsconfig.json, packages/content/circuits/tsconfig.json, packages/content/tsconfig.json, packages/data-commitment/tsconfig.json, packages/demo/tsconfig.json, packages/feeds/tsconfig.json, packages/fetcher/tsconfig.json, packages/mcp/tsconfig.json, packages/parser/tsconfig.json, packages/passthrough/tsconfig.json, packages/relay/tsconfig.json, packages/sdk/tsconfig.json, packages/seal/tsconfig.json, packages/spec/tsconfig.json, packages/trust402/tsconfig.json, packages/web/tsconfig.json, packages/x402/tsconfig.json
agent_commit_share0,26
toolchain_manifestspackages/agent/Cargo.toml, packages/agent/normalize/Cargo.toml, packages/canonical-sort/normalize/Cargo.toml, packages/passthrough/Cargo.toml
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — Astro con configuración de verificación de tipos (packages/agent/tsconfig.json, packages/blog-article/circuits/tsconfig.json, packages/canonical-sort/tsconfig.json, packages/content/circuits/tsconfig.json, packages/content/tsconfig.json, packages/data-commitment/tsconfig.json, packages/demo/tsconfig.json, packages/feeds/tsconfig.json, packages/fetcher/tsconfig.json, packages/mcp/tsconfig.json, packages/parser/tsconfig.json, packages/passthrough/tsconfig.json, packages/relay/tsconfig.json, packages/sdk/tsconfig.json, packages/seal/tsconfig.json, packages/spec/tsconfig.json, packages/trust402/tsconfig.json, packages/web/tsconfig.json, packages/x402/tsconfig.json)
54.3/55Tamaños de archivo manejables — 3/247 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageAstro
largest_source_bytes120.192
source_files_sampled247
oversized_source_files3
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signal
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'lemma-agent' from its registry
  • Could not fetch npm package '@lemmaoracle/feeds' from its registry
  • Could not fetch npm package '@lemmaoracle/roles' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 4.2 / 10
4.2agregado

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-29 18:21 UTC

8Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
9CI-Tests23 out of 24 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 3/30 approved changesets -- score normalized to 1
10Contributorsproject has 5 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
0Vulnerabilities134 existing vulnerabilities detected
Dependencias directas 59
RegistroPaqueteRestricción de versiónManifiesto
crates.iowasm-bindgen0.2packages/agent/Cargo.toml
crates.iojs-sys0.3packages/agent/Cargo.toml
crates.ioserde1packages/agent/Cargo.toml
crates.ioserde_json1packages/agent/Cargo.toml
npm@lemmaoracle/sdkworkspace:*packages/agent/package.json
npm@lemmaoracle/specworkspace:*packages/agent/package.json
npmposeidon-lite0.3.0packages/agent/package.json
npmramda0.30.1packages/agent/package.json
npm@lemmaoracle/sdkworkspace:*packages/attestation/package.json
npm@lemmaoracle/specworkspace:*packages/attestation/package.json
npmsnarkjs^0.7.6packages/attestation/package.json
npm@lemmaoracle/sdkworkspace:*packages/blog-article/package.json
npm@lemmaoracle/specworkspace:*packages/blog-article/package.json
npmposeidon-lite^0.3.0packages/content/package.json
npm@lemmaoracle/sdkworkspace:*packages/content/package.json
npm@lemmaoracle/specworkspace:*packages/content/package.json
npm@lemmaoracle/canonical-sortworkspace:*packages/data-commitment/package.json
npm@lemmaoracle/sdkworkspace:*packages/data-commitment/package.json
npm@noble/hashes^1.7.0packages/data-commitment/package.json
npmposeidon-lite^0.2.0packages/data-commitment/package.json
npm@lemmaoracle/fetcherworkspace:*packages/feeds/package.json
npm@lemmaoracle/sdkworkspace:*packages/feeds/package.json
npm@trust402/sdkworkspace:*packages/feeds/package.json
npmposeidon-lite^0.2.0packages/feeds/package.json
npm@lemmaoracle/sdkworkspace:*packages/fetcher/package.json
npm@lemmaoracle/sdk^0.0.31packages/mcp/package.json
npm@lemmaoracle/spec^0.0.30packages/mcp/package.json
npm@modelcontextprotocol/sdk^1.29.0packages/mcp/package.json
npmagents^0.11.4packages/mcp/package.json
npmramda^0.30.1packages/mcp/package.json
npmzod^3.24.0packages/mcp/package.json
npm@huggingface/transformers^3.8.0packages/parser/package.json
npmonnxruntime-node^1.21.0packages/parser/package.json
npmramda^0.30.1packages/parser/package.json
crates.iowasm-bindgen0.2packages/passthrough/Cargo.toml
crates.iojs-sys0.3packages/passthrough/Cargo.toml
npm@lemmaoracle/sdkworkspace:*packages/passthrough/package.json
npm@lemmaoracle/specworkspace:*packages/passthrough/package.json
npmramda0.30.1packages/passthrough/package.json
npm@lemmaoracle/sdkworkspace:*packages/relay/package.json
npmramda^0.30.1packages/relay/package.json
npm@lemmaoracle/sdkworkspace:*packages/roles/package.json
npm@lemmaoracle/specworkspace:*packages/roles/package.json
npmsnarkjs^0.7.6packages/roles/package.json
npm@docknetwork/crypto-wasm^0.35.0packages/sdk/package.json
npm@lemmaoracle/specworkspace:*packages/sdk/package.json
npm@noble/ciphers^1.2.0packages/sdk/package.json
npm@noble/curves^1.8.0packages/sdk/package.json
npm@noble/hashes^1.7.0packages/sdk/package.json
npmbuffer^6.0.3packages/sdk/package.json
npmposeidon-lite^0.2.0packages/sdk/package.json
npmramda^0.30.1packages/sdk/package.json
npmsnarkjs^0.7.5packages/sdk/package.json
npm@lemmaoracle/sdkworkspace:*packages/seal/package.json
npm@lemmaoracle/specworkspace:*packages/seal/package.json
npm@lemmaoracle/sdkworkspace:*packages/trust402/package.json
npm@lemmaoracle/specworkspace:*packages/trust402/package.json
npm@noble/hashes^1.7.0packages/trust402/package.json
npmposeidon-lite^0.2.0packages/trust402/package.json
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

Avisos de dependencias 3

Instalar npm:@lemmaoracle/mcp@0.0.23 arrastra 198 paquetes, directos y transitivos: 3 tienen avisos conocidos, de los cuales 0 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
brace-expansion2.1.2indirectaalta15.0.8
underscore1.13.6indirectaalta11.13.8
@hono/node-server1.19.17indirectamoderada12.0.5

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "ai-agents",
        "did",
        "provenance",
        "rag",
        "selective-disclosure",
        "trusted-web",
        "typescript",
        "verifiable-ai",
        "zero-knowledge-proofs",
        "zk"
      ],
      "is_fork": false,
      "size_kb": 77576,
      "has_wiki": false,
      "homepage": "https://lemma.frame00.com/",
      "languages": {
        "CSS": 47928,
        "HTML": 436942,
        "Rust": 42625,
        "XSLT": 6822,
        "Astro": 2046692,
        "Shell": 34479,
        "Circom": 41759,
        "Solidity": 49306,
        "Dockerfile": 3619,
        "JavaScript": 124399,
        "TypeScript": 1396837
      },
      "pushed_at": "2026-07-29T17:02:31Z",
      "created_at": "2026-02-22T15:02:25Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-29T17:02:49Z",
      "description": "Give AI proven facts — a cryptographically verified truth layer for agent AI, built on ZK proofs, selective disclosure, and on-chain provenance.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "Astro",
      "significant_languages": [
        "Astro",
        "TypeScript",
        "HTML"
      ]
    },
    "owner": {
      "blog": "https://lemma.frame00.com/",
      "name": "lemmaoracle",
      "type": "Organization",
      "login": "lemmaoracle",
      "company": null,
      "location": null,
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/261871631?v=4",
      "created_at": "2026-02-16T07:30:11Z",
      "is_verified": null,
      "public_repos": 8,
      "account_age_days": 163
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "926478b2408863158384f4b3ee46507c79b9afc7",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-29 (#716)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-29T17:02:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f4aab66c09a08623062a9bd78fbdaa3b7b29e00",
          "body": "* feat(web): add proof verification UI to verify page\n\nWire single-record mode to GET /v1/proofs and POST /v1/proofs/verify so visitors can verify a registered proof on the certificate card.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* feat(web): auto-run proof verify on single-doc page load\n\n[…]\ny button with an on-load verifying skeleton and trigger verifyProof after loadDoc succeeds.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(web): add proof verification UI with auto-verify (#714)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-29T12:35:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f416a3ad35c7a4d7e65ab4537abd333803a5970b",
          "body": "* feat(web): SPECページと真正性ページ(JA)をリニューアル先行でデザイン移行\n\nサイトリニューアルに先行して、モック(lemma_article_mock_v6 /\nlemma_authenticity_mock_v4)の面をこの2ページに入れる。**先に確認したいのは\nこの2ページだけ**なので、記事テンプレート全体には広げていない。\n\nトークンの値は /ja/preview/top/(PreviewTopTemplate の .pv)と同じものを\n使う——リニューアル後に2種類の緑・2種類の紙色が並ばないようにするため。\nフォントは **Layout が実際に読み込むもの\n[…]\nc.com>\nClaude-Session: https://claude.ai/code/session_01JSvoSwF3xseF2aH39a7Fr4\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): SPECページと真正性ページ(JA)をリニューアル先行でデザイン移行 (#713)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-29T11:04:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "38e3f573a8a58e33c36a76c0867988cd76f29fc6",
          "body": null,
          "is_bot": false,
          "headline": "chore(sdk): bump to 0.1.1 (getByDocument → getByDocHash)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-29T11:03:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29fc249ea976b3279a7e616e15abd0ad3fdade5a",
          "body": "No consumers yet — safe rename before adoption.",
          "is_bot": false,
          "headline": "refactor(sdk): rename getByDocument to getByDocHash",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-29T11:02:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7b5b8cf82548833a6fc756dd3571ba9ac021a50",
          "body": "- spec: ProofRecord type (docHash, circuitId, proof, inputs, status, registeredAt)\n- spec: GET /v1/proofs OpenAPI definition\n- sdk: proofs.getByDocument(docHash) → Promise<ProofRecord>\n- Enables verify flow: getByDocument → POST /v1/proofs/verify",
          "is_bot": false,
          "headline": "feat(sdk,spec): add ProofRecord type and proofs.getByDocument",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-29T10:58:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ab252099d9a595d846b6758fdbf31e618d7ed3f",
          "body": "* feat(web): 新トップページ案の社内プレビュー /ja/preview/top/ を追加\n\n実装指示 v1(2026-07-29)/モック v5.8 に沿って、新トップページ案を社内が\n実機で触れるプレビュー面として追加する。本番トップ `/` `/ja/` は変更しない。\n\n- `/ja/preview/top/`(JA のみ)。`noindex,nofollow` + sitemap から除外\n  (astro.config.mjs の filter に `/preview/` を追加)。サイト内リンクなし。\n- 最上部に PREVIEW 識別バー(本番差し替え時に削除する)。\n[…]\nc.com>\nClaude-Session: https://claude.ai/code/session_01JSvoSwF3xseF2aH39a7Fr4\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): 新トップページ案の社内プレビュー /ja/preview/top/ (#712)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-29T03:43:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2943aa4975dafcc2e2239df0ef6ef897c7fb261c",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-28 (#711)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-28T17:02:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d17d11f700ed8d6620d320edbbe8c462ff413952",
          "body": "* content(briefs): Critical Brief 110・111 を JA+EN で追加\n\n- 110: OpenAI の評価用エージェントが封じ込め(社内 proxy 1 本)を\n  ゼロデイで抜け、無関係な Hugging Face 本番環境を侵害した事案。\n  Pillar 03 / agent-infrastructure。\n- 111: Wanchain の Cardano–BNB ブリッジで、TreasuryCheck の非単射な\n  署名メッセージ符号化により正規署名 1 つが約 6.5 万倍の払い出しに\n  再利用された事案。Pillar 01 / bridg\n[…]\n-Session: https://claude.ai/code/session_01Puk9rsGWXSFQUgcyzT26UY\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "content(briefs): Critical Brief 110・111 を JA+EN で追加 (#710)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-28T03:06:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b7f7147e693685d66ac754b8cd69502a3369741b",
          "body": null,
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2026-07-27) (#709)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-27T20:02:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5caeabb04664958dc09c620e372d59c5e240e619",
          "body": "直近90日(=当プロパティに残っている全期間)の JA+EN Views 合算で再集計。\nNo.067 が圏外になり、No.011(SynthID)が2位で新規入り。\n集計期間の根拠は popularBriefs.ts のコメントに明記。",
          "is_bot": false,
          "headline": "content(briefs): よく見られている Brief を GA4 2026-07-27 時点に更新 (#708)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-27T08:08:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f13b2dd928b416e4b9247f4bcf1674817b5f1df",
          "body": "#706 で Featured / Recent に昇格した記事を変更履歴リストから除外していたが、\n変更履歴はリリース履歴として通しで読めるべきなので除外をやめ、全件表示に戻す。\nFeatured / Recent を section 横断の日付降順で選ぶ #706 の挙動は不変。",
          "is_bot": false,
          "headline": "fix(blog): リリース記事・Announcements を変更履歴リストにも残す (#707)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-27T05:58:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a2411a6350a3d176199f8b7e6ed12f16e5e0054",
          "body": "Featured / Recent が section === \"Essays\" の記事だけを拾っていたため、\ndefaultSectionByCategory により section: Changelog が既定になる\ncategory: Announcements の記事は、日付が最新でもインデックス上部に出ず\n下部の変更履歴リストにしか現れていなかった。\n\nFeatured / Recent を entries(記事+変更履歴を日付降順にマージ済み)から\n選ぶよう変更し、上部に出た分は変更履歴リストから除外して二重掲載を防ぐ。\nJA / EN 両インデックスに適用。",
          "is_bot": false,
          "headline": "fix(blog): 最新記事が Announcement だとブログ上部に出ない件 (#706)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-27T05:29:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "069c11d14509e17494d1f89748a287df5069c379",
          "body": "…hots (#705)\n\n* feat(feeds): list forex/composite daily fetcher envelope on Trust402\n\nAdd an idempotent post-pipeline script that fetches suite latest via\nfetcher Workers, archives the envelope by request.date, and publishes a\nTrust402 dataset listing whose commitment is the fetcher Merkle root.\n\nCo\n[…]\nefault\nto in-process fetchAndCommit (Node), keep Workers behind USE_FETCHER_WORKERS.\n\nCo-authored-by: aggre <hiroyuki.aggre@gmail.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(feeds): Trust402 listing for forex/composite daily fetcher snaps…",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-26T20:02:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b5a1305e120192237889937d6aed88616c8ddded",
          "body": "* feat(fetcher): bind request URL and fetch time into commitment\n\nCommit `{ request: { url, fetchedAt, date }, response: { body } }` under\ndata-commitment-v1, and reshape FetchResult to `{ request, response,\ncommitment }`. Update feeds at the shared FetchResult boundary so forex\nworker consumers and\n[…]\ne.data` or legacy `data` so forex feeds and registry tests work\nacross deploy order.\n\nCo-authored-by: aggre <hiroyuki.aggre@gmail.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(fetcher): bind upstream URL and fetch time into commitment (#704)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-26T14:13:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "78161f9e1729468bba0fd494bf3305ad2e978047",
          "body": null,
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2026-07-25) (#701)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-25T20:02:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "721ed886b72fbb49b66386be96fa584135d4fe70",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-25 (#702)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-25T17:02:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "082c5564b48c6c445cd25f152e47639dcf3cf2f9",
          "body": "- feeds/jp-postal-codes.ts: fix no-base-to-string by adding type guards before String()\n- seal/proof.ts: remove 5 unused eslint-disable directives + 2 any type aliases\n  after SDK build resolved no-unsafe-* errors\n- agent/commit.ts: remove 3 unused eslint-disable directives + unnecessary\n  type assertion after SDK build resolved no-unsafe-* errors",
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2026-07-24) (#700)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-24T20:02:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87d0c2a582a28841f3f6cc7d2542c3ab3086ce78",
          "body": "PR #697 レビュー指摘。単票モードは実装完了しているため、冒頭 JSDoc の\n「※次段で実装(API契約 CTO 確認待ち)」「← 本ファイルで実装」を削除。\n(もう1件の display=swap は既に付与済みのため変更なし)\n\n\nClaude-Session: https://claude.ai/code/session_01QK3E1fg2R92E4keQkzd9Dv\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(verify): 古い JSDoc を更新(両モード実装済み・次段待ち記述を削除) (#698)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-24T10:37:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "da3d2879281cd6c2256c0430d6e5e5c42da79a8f",
          "body": ".panel.tech::before が radial-gradient(circle,…)+border-radius:50% で、狭幅では\n要素がほぼ正方形になり「くっきりした丸」に見えていた。パネル全面(inset:0)に\n広げた楕円のソフトウォッシュ radial-gradient(125% 78% at 92% -18%, …, transparent 60%)\nに変更し、どの幅でも右上からの環境光として馴染むようにした。\n(単票 cert2 は別ジオメトリのため影響なし)\n\n\nClaude-Session: https://claude.ai/code/session_01QK3E1fg2R92E4keQkzd9Dv\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(verify): REGISTRY パネルのライム環境光がモバイルで硬い円になる件 (#699)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-24T10:33:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "56ed6e60a1d1b19ed362c09c78b807e80f92d3af",
          "body": "* feat(verify): 全体モードを検証センター(REGISTRY)へ刷新\n\nLemma 検証ページ実装指示 v1 の全体モード(?doc なし)。VerifyAnchorTemplate を\nモック v9 準拠のスレート REGISTRY パネルへ刷新:\n- ヘッダーはロゴのみ(LemmaOracle)・フッターは © / 利用規約 / プライバシーのみ\n  (検証面の第三者性を守るため宣伝導線を置かない)\n- GET /v1/counters を表示のたびに取得(45秒ポーリング)。失敗時は推定で埋めず\n  — / OFFLINE / 生レスポンス直リンク。数字はビルド時に焼き込ま\n[…]\nession: https://claude.ai/code/session_01QK3E1fg2R92E4keQkzd9Dv\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(verify): 検証ページを2モード(単票 + 全体)へ刷新 (#697)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-24T09:27:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7fe79e4b976ce30b47a527f874606d3fef4308a2",
          "body": "…ServiceNow RCE), JA+EN (#696)\n\n* content(critical-briefs): add No.107–109 (Verus repeat / AFX Trade / ServiceNow RCE), JA+EN\n\n3件の Critical Brief を JA+EN で追加(いずれも status: draft・published は仮日付 2026-07-24)。\n\n- 107 Verus-Ethereum ブリッジ再攻撃($7.54M・5月と同一入口の反復)\n- 108 AFX Trade validator 署名鍵/クォーラム侵害($24.15M)\n[…]\nession: https://claude.ai/code/session_01QK3E1fg2R92E4keQkzd9Dv\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "content(critical-briefs): add No.107–109 (Verus repeat / AFX Trade / …",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-24T02:31:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b0e749b26aad5d6dc1a1768beb9718bdaa93093a",
          "body": "- FP rewrite: parsePostalCodes (for loop → filter/map chain)\n- Fixed restrict-template-expressions in fetch error message\n- Fixed no-base-to-string in getDocumentId and getAttributes (type narrowing)\n- Added justified disable comments for byte-level ZIP scanner, guard throws, and FeedSource.fetch interface\n- Removed 4 existing eslint-disable comments (loop + conditionals in parsePostalCodes)\n\nRemaining: 2 no-base-to-string in getAttributes (meta.count, meta.updatedAt)",
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2026-07-23) (#694)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-23T20:01:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0ad45d0c464da9ee0a2a001a85ac2af8dd110d9",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-23 (#695)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-23T17:02:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4583eb0bc4eb1bb8b50ef3d8348a398cb2dcfd7b",
          "body": null,
          "is_bot": false,
          "headline": "fix(feeds): strip CSV quotes in jp-postal-codes parser",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-23T14:27:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26c5a083063e6dea0ec4ba28e4e33f8bd3df2763",
          "body": "Compact snapshot (~4 leaves): {type, count, contentHash, updatedAt}\n- contentHash = SHA-256 of canonical full dataset JSON (124K records)\n- ZIP extraction with zero external dependencies (node:crypto + node:zlib)\n- idempotent: docHash = sha256(root | contentHash)\n- meta.* attributes only (per-record postal.* not emitted — too many)\n\nSeed: packages/feeds/scripts/seed-jp-postal-codes.ts\nTests: 15 tests (parse, canonical, snapshot, ZIP extraction)",
          "is_bot": false,
          "headline": "feat(feeds): jp-postal-codes feed — Japan Post postal code data",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-23T14:18:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28ca906db6015b1854e21abd2b0938e1b5ef3a33",
          "body": "* fix(lint): daily lint fixes (2026-07-22)\n\n- sdk: fix 8 eslint errors (FP rewrites + 2 new justified disables)\n  - canonical.ts: no-control-regex → justified disable (JSON escape regex)\n  - commitments.ts: no-unsafe-argument → type narrowing\n  - commitments.ts: 3x no-conditional-statements → ternar\n[…]\ne paths from main left the committed\nbundle stale; CI checks git diff after bundle:openapi.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(lint): FP rewrites across packages (2026-07-22) (#689)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-23T08:47:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "88222c977e7cff1d641a11d52fc22e4d84d817da",
          "body": "…(#692)\n\n祝日 証明付きデータAPI(W0)の型基盤。配信は forex と同じ feeds スイート配下\n(/v1/suites/feeds/{dataset}/latest + /plain)に載せる。\n\n- DataProvenance: contentHash(data の canonical JSON の SHA-256・クライアント再\n  ハッシュで照合)+ issuerId/snapshotAt、docHash/registeredAt/verifyUrl は\n  optional(登録失敗中も鮮度優先で配信)。verifyUrl は GET /v1/documents/\n[…]\n\n\n\nClaude-Session: https://claude.ai/code/session_015VgpJgZYuM4YwxrJ4R9z7q\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): DatasetResponse / DataProvenance — 証明付き公共データAPI(W0 PR-A) …",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-23T05:07:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d2342a7e05fedd608d05fe2b6eed963e83c95724",
          "body": "…#693)\n\n証明付き公共データAPI(W0)の proof 生成側。snarkjs は workerd で動かないため、\nproof 生成は Node の feeds パイプラインが担う(workers は配信/計数のみ=#124)。\n\n- src/feeds/jp-holidays.ts: 内閣府 祝日 CSV を fetch → Shift_JIS デコード\n  (TextDecoder(\"shift_jis\"))→ 正規化(YYYY/M/D→ISO・日付昇順)。\n  - **コンパクト commit**:Merkle 木は `{type,holidaysHash,count,rang\n[…]\n\n\n\nClaude-Session: https://claude.ai/code/session_015VgpJgZYuM4YwxrJ4R9z7q\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(feeds): jp-holidays feed + seed(proof 生成)(W0 PR-B・WIP/lemma 側) (…",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-23T04:54:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a326790491bb8259614467edb3b0e9f07686ab9",
          "body": "Add forex-average-v1 circuit that cryptographically proves\naverageRate = (rateA + rateB) / 2 without exposing raw source values.\n\nCircuit (8,368 constraints, PTAU 2^15):\n- Per-currency proof: 2 Merkle inclusions + average assertion\n- pathHash is runtime public input (currency-independent)\n- Rates sc\n[…]\ndd runAverageProofPipeline() for forex-average-v1 proofs\n- forex-proof-pipeline.ts: source feeds → data-commitment-v1, composite → forex-average-v1\n\nDry-run verified: 32+168+29 = 229 proofs, all pass.",
          "is_bot": false,
          "headline": "feat(feeds): forex-average-v1 ZK circuit for composite average proofs",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-23T02:29:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3ed6b696265f3100e27f38ab8ec156fb4d2d0d4",
          "body": "* feat(web): 検証センターに検証カウンターを設置(live 取得・内訳・最終更新時刻)\n\n週次シグナル→アクション提案 v3 の P0b。「数字には、出典がある。」を掲げる面に\n出典の無い数字は置けないため、表示のたびに GET /v1/counters から取得する。\n\n- components/VerificationCounter.astro: 検証済み証明数(V)・発行された証明(I)、\n  各内訳、最終更新時刻、「この数字を検証する」導線。JA/EN 同梱。\n- config/counters.ts: 参照APIのURL。数字の取得元とリンク先が必ず一致するよう\n  1か\n[…]\nession: https://claude.ai/code/session_015VgpJgZYuM4YwxrJ4R9z7q\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): 検証センター /verify を SSL証明書型に+検証カウンター公開 (#691)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-22T23:57:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8120f483423178bdbbf6d6e7899e909fd8e9c65f",
          "body": "* chore: pnpm update 2026-07-22\n\n* chore: pnpm update 2026-07-22",
          "is_bot": false,
          "headline": "chore: deps update 2026-07-22 (#690)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-22T17:02:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6644c05ca05a687413265d07b2d0323aad7252f6",
          "body": "The composite feed (forex/composite) already provides the abstraction\nlayer. Source feeds should name their actual data provider — no need\nto hide behind an ECB alias.",
          "is_bot": false,
          "headline": "refactor(feeds): rename forex/ecb → forex/frankfurter",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-22T00:35:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5984f48ad8d9a0ccfd797664df37192860d838c",
          "body": "The composite feed called commitDeep() without maxDepth, building a\ntree at minimum depth (e.g. 6 for 34 leaves). But the circuit expects\ndepth 16. The witness padded siblings to 16, but the tree only had 6\nlevels — root mismatch caused Assert Failed on all composite proofs.\n\nSource feeds (frankfurter, er-api) were unaffected because they go\nthrough the fetcher Workers which defaults maxDepth to 16.",
          "is_bot": false,
          "headline": "fix(feeds): pass maxDepth=16 to composite feed commitDeep",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-22T00:24:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbf017c3dbf61d0e6c83fdd379be023eb6e4b18d",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync pnpm-lock.yaml with package.json",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T23:57:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0553785aa50f7ed0a7b9e01d5b1a6617b86e1fed",
          "body": "- Add forex-er-api FeedSource (ExchangeRate-API free tier)\n- Add forex-composite FeedSource (Frankfurter ⊕ ER-API average)\n- Add runMultiPipeline for FeedSource[] sequential processing\n- Add toHex64 helper to prevent leading-zero truncation in BigInt\n- Update forex-proof-pipeline entry point for 3-feed execution\n- Include source roots in composite Merkle tree for cryptographic binding\n- Store per-currency source values in document attributes for audit",
          "is_bot": false,
          "headline": "feat(feeds): add multi-source forex pipeline with composite average",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T23:53:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af4a27c1ad4a13c2cfef0eddd98b1024c64d5a26",
          "body": "- pipeline.ts: prove via SDK (fetches wasm/zkey from IPFS, cached)\n- Remove wasmPath/zkeyPath from PipelineConfig\n- Remove snarkjs/@types/snarkjs/fs dependencies from feeds\n- SDK v0.0.40: add artifact cache to prover.prove (batch proving)\n\nFirst proof ~9s (IPFS fetch), subsequent ~900ms (cached).",
          "is_bot": false,
          "headline": "refactor(feeds): replace groth16.fullProve with SDK prover.prove",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T21:40:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eed444f99585cf0908502c0d91dc1b2588988dc8",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-21 (#688)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T17:02:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5db9aae8f71e5f53072965a2c731f3f0b0bb42d",
          "body": "…d-v1\n\ncanonical-sort-v1 is a registered schema in D1 that accurately describes\nthe fetch → canonicalize → commit pipeline the fetcher already performs.",
          "is_bot": false,
          "headline": "fix(feeds): use canonical-sort-v1 schema instead of made-up lemma-fee…",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T15:19:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4954f977b2cae0acb72e534c0379e78fa47b7307",
          "body": "…ubs.nippo.v1 → lemma-feed-v1\n\n- forex/ecb: authority-based ID instead of source/proxy name\n- lemma-feed-v1: proper feed schema instead of CLUBS daily report schema",
          "is_bot": false,
          "headline": "refactor(feeds): rename feed forex/frankfurter → forex/ecb, schema cl…",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T15:04:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a07fc5a4c2630aca4bf4f9092c973254b79b697d",
          "body": "getAttributes now flattens all rates (rates.EUR, rates.JPY, etc.) into\nthe document attributes, enabling /v1/suites/feeds/* to return the\ncomplete feed data alongside verification status.",
          "is_bot": false,
          "headline": "feat(feeds): include all forex rates in attributes for full data access",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T14:44:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a07f689b3baa91e42baf1dfa15245acc402ea25",
          "body": "… pipeline\n\n- forex.ts: in-process fetchAndCommit → HTTP GET to fetcher Workers\n- pipeline.ts: generic runProofPipeline (fetch→register→prove→submit)\n- FeedSource: add getDocumentId/getAttributes for per-feed metadata\n- forex-proof-pipeline.ts: thin entry point (env + 1 call)\n- feeds package: add @lemmaoracle/sdk + @types/snarkjs deps",
          "is_bot": false,
          "headline": "feat(feeds): route pipeline through fetcher Workers + extract generic…",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T14:04:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a49dade1c344f87f3d09239dd86fba5dddecdd0",
          "body": null,
          "is_bot": false,
          "headline": "fix: use wrangler [alias] to resolve SDK from source, drop [build] step",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T13:14:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dd72bef177a6b94382d915b2959c5cad42148f7",
          "body": null,
          "is_bot": false,
          "headline": "fix: add [build] command to wrangler.toml to build SDK before bundling",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T13:13:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45fcf86cc18b3c9e4f6660212dd243ef280ce7d9",
          "body": null,
          "is_bot": false,
          "headline": "revert: rename fetch back to fetcher (package + dir + worker)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T13:02:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "add46a661fe2b3858e177b76a4f3ce58346f301c",
          "body": "…oracle/fetch + pnpm-lock",
          "is_bot": false,
          "headline": "fix: update feeds package imports from @lemmaoracle/fetcher to @lemma…",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T12:59:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d165213adcb57a7b836151e2ad17bcb064fb6d8f",
          "body": null,
          "is_bot": false,
          "headline": "deploy",
          "author_name": "Aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T12:53:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f7cac3af73bafff0be1f140248f5af5c8ad01f3",
          "body": "- Package: @lemmaoracle/fetcher → @lemmaoracle/fetch\n- Directory: packages/fetcher → packages/fetch\n- Worker name: fetcher → fetch\n- Health service: lemma-fetcher → fetch",
          "is_bot": false,
          "headline": "refactor: rename fetcher -> fetch (package + dir + worker name)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T12:47:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96191b9d2c5cdfac12160db9e3e22283983db8da",
          "body": "Wrangler handles TS natively via esbuild; no separate build step needed.",
          "is_bot": false,
          "headline": "chore: remove build:worker script, add --noEmit to type-check:worker",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T12:38:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a223c4da4d747f351379bace67e9e0832896ca5",
          "body": "The fetcher is a pure HTTP service — scheduling is the caller's job.\nRemoved: scheduled handler, SCHEDULED_SOURCES env, cron triggers,\nScheduledController/ExecutionContext types.",
          "is_bot": false,
          "headline": "refactor: remove scheduled trigger from fetcher",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T12:31:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7078cbdc6fb39cf070e167f685b2e0d484c42435",
          "body": null,
          "is_bot": false,
          "headline": "chore: rename worker to 'fetcher'",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T12:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ecec4d3a4f79f9c2352a766459c9f436e8417d7",
          "body": "- src/worker.ts: HTTP API (GET/POST /fetch, GET /health) + cron trigger\n  - X-API-Key auth via FETCHER_API_KEY secret\n  - SCHEDULED_SOURCES for cron-configured URLs\n  - maxDepth defaults to 16 (data-commitment-v1.1)\n- wrangler.toml: cron at 17:35 UTC daily, nodejs_compat flag\n- tsconfig.worker.json: @cloudflare/workers-types\n- package.json: deploy/dev/build:worker/type-check:worker scripts\n- Dry-run: 8.3KB bundle (2.8KB gzip), type-check clean, 7/7 tests pass",
          "is_bot": false,
          "headline": "feat: fetcher CF Workers entry point + wrangler.toml",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T12:27:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1e1ac7138d4075dad0ead7bba98936a860d5f34",
          "body": "- Rust crate with serde_json + ryu for deterministic JSON serialization\n- Matches TS canonical.ts rules: key sort, no whitespace, -0→0, float .0 strip\n- 12 unit tests passing\n- wasm-pack build → canonical_sort_bg.wasm (64KB) + JS shim\n- Uploaded to IPFS: wasm=QmTjU7xT6..., js=QmcPLweD5C...\n- Schema registered on workers API (artifact update pending D1 access)\n\nAlso: consolidate fetcher imports (2 lines → 1)",
          "is_bot": false,
          "headline": "feat: canonical-sort-v1 Rust/WASM normalize",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T12:05:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20da6e5fc65bba1e9cb3278c5230557ca4c58297",
          "body": null,
          "is_bot": false,
          "headline": "Bump package versions",
          "author_name": "Aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T11:53:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e741ad2e35382cd99f55094ebc9b60b5a4ea0886",
          "body": "- commitDeep pairs naturally with commit (shallow vs deep traversal)\n- Follows JS/TS convention: cloneDeep, mergeDeep, equalDeep\n- Renamed across SDK, fetcher, and feeds pipeline\n- CommitToDataOptions → CommitDeepOptions\n- Pipeline import switched from data-commitment dist to SDK dist",
          "is_bot": false,
          "headline": "refactor: rename commitToData → commitDeep",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T11:35:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b77286acd1585e1705db3afadfc7e3c7ff0b1981",
          "body": "- fix(sdk): toScalar always hashes strings via SHA-256 (prevents 42/\"42\" collision)\n- feat(sdk): add commitToData() with recursive path-value extraction + maxDepth option\n- feat(sdk): add canonicalSort() / canonicalize() (canonical-sort-v1)\n- refactor(fetcher): depend only on @lemmaoracle/sdk (remove canonical-sort, data-commitment deps)\n- feat: register data-commitment-v1.1 circuit with artifacts on workers API\n- test: update toScalar test for new SHA-256 string behaviour",
          "is_bot": false,
          "headline": "feat: SDK commitToData + canonicalSort, fetcher SDK-only dep",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T11:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebc11426e2449b84bbd83771ac253adf4f38c15b",
          "body": null,
          "is_bot": false,
          "headline": "chore: update pnpm-lock",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T10:21:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "709f798202a6c4a829a44fb6a13e301cb3eab70b",
          "body": null,
          "is_bot": false,
          "headline": "feeds: add snarkjs dep + forex-proof-pipeline script",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-21T10:21:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45017ed4654428196c83767c53662e9e17424be4",
          "body": "照合ページ改修提案(2026-07-21)改修3 の最小構成。CLUBS 等の照合ページの\nフッタークレジット「独立した証明基盤 Lemma に固定されています」が指す受け皿。\n\n- /verify/(EN)・/ja/verify/(JA)。共有テンプレ VerifyAnchorTemplate を locale 分岐。\n- 内容(Phase 2まで最小構成): 検証境界(✓ が意味すること・しないこと)/\n  照合・検証・証明の3語の分業/独立した証明基盤(第三者性・肯定文)/四本柱への導線。\n- 用語: 「AI証明基盤 / proof layer」。照合=当事者の行為・検証=第三者の行為・\n[…]\n\n\n\nClaude-Session: https://claude.ai/code/session_01D3EsNY9rApoqT6nvrWEXJH\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): 検証センター(照合記録アンカーページ)/verify・/ja/verify (#687)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-21T10:12:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5e30dfd3ea635c2f570017efc7d30a8168425d48",
          "body": "…ing) (#686)\n\n* Add Critical Briefs 105 (JAPRO likeness/voice) and 106 (Figma content training)\n\n105-japro-likeness-voice-ai-provenance: 肖像・声の無断利用が4万件超、削除率100%でも\n同一人物のモデルが再投稿(Pillar 01・data-provenance)。\n106-figma-content-training-default-consent: AI学習が個人/小規模で既定オン・\nエンタープライズで既定オフ、Khan v. Figma(Pillar \n[…]\nession: https://claude.ai/code/session_01D3EsNY9rApoqT6nvrWEXJH\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Critical Briefs 105 (JAPRO likeness/voice) + 106 (Figma content train…",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-21T02:34:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0f666ada8d979be76459b1db1e06f7f3a5d3752b",
          "body": "…TI) (#685)\n\n103-ostium-oracle-signer-key-future-priced-data: オラクル署名鍵1本の侵害で\n未来日付の価格が有効署名で受理され $18M 流出(Pillar 01・data-provenance)。\n104-webmcp-mid-session-tool-injection: WebMCP のツール表面をセッション途中で\n差し替える MSTI 攻撃(Pillar 03・agent-infrastructure)。\n\nJA+EN 各2ファイル。gap モジュール・og_lead 付与、astro sync 検証済み。\n\n\nClaude-Session: https://claude.ai/code/session_01D3EsNY9rApoqT6nvrWEXJH\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Critical Briefs 103 (Ostium oracle signer key) and 104 (WebMCP MS…",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-21T02:32:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b1a0e89f634e04d20229c32e7444b1c7391045ac",
          "body": null,
          "is_bot": false,
          "headline": "chore: update submodules 2026-07-20",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-20T20:30:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "397ffc3d1be57ec3cf1292b48a4bf2345bb71607",
          "body": "- trust402: 35→0 errors — FP rewrite of detectContentType (if-chain\n  → lookup-table + single expression), spread-based header\n  construction in publish()/list(), .catch() for proof submission,\n  ternary for file upload conditional, type-safe errBody casts\n- 14 FP rewrites, 6 justified new disables \n[…]\n\n  async body, 1 Object.assign for Error prototype, 1 try-catch\n  inside Promise wrapper for URL API boundary)\n- 0 disable comments removed (all existing disables are justified\n  boundary/crypto code)",
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2026-07-20) (#683)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-20T20:02:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "762bc7339457988497388ac2ec3e779e611e4036",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-20 (#684)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-20T17:02:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0d05520c46b4044bcbbf29ae2372e1b5bb7ec4a",
          "body": "seal (15→0):\n  - bits.ts: extract throw into  helper with justified disable\n  - proof.ts: add type annotations for imprecise SDK types + disables\n\nagent (24→0):\n  - validate.ts: rewrite validateTimestamps in FP style (remove let/loop/expression-statements)\n  - validate.ts: remove unused  helper\n  - \n[…]\ns\n\ncontent (49→38, 11 fixed):\n  - normalizer.ts: rewrite reduceElements in functional style (reduce instead of for-loop)\n  - normalizer.ts: extract throw into  helper for writeBigEndian overflow check",
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2025-07-19) (#681)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-19T20:02:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1652aedb047306a6d729fdaf0b76f08d59910213",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-19 (#682)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-19T17:02:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f071c39ab002046164c31328d9707bc2493f10b2",
          "body": "Same root cause as c10a726 (which removed the broken `build` script):\nboth packages have no `src/` and no `tsconfig.json` at the package\nroot — only `circuits/`. `tsc --noEmit` with no project and no source\nfiles prints help and exits 1, breaking the root `pnpm type-check`\n(`pnpm -r --if-present typ\n[…]\nrun `pnpm type-check`, so this is latent, but the\ntemplate-residue script is removed for consistency with the c10a726\nprecedent. Circuit build (`build:circuit`) and tests are unaffected.\n\nRefs c10a726",
          "is_bot": false,
          "headline": "fix: remove broken `type-check` script from attestation/roles (#680)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-18T20:01:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "88ad64cfaa06d8fa6b97c71e80ef5349e9b6d8ca",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-17 (#679)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-17T17:02:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b13d6281e118d3f714aead0793e4f100f863616",
          "body": "- sdk/platform.ts: 5 errors fixed — justified polyfill boundary disables\n- trust402/pay-fetch.ts: 21 errors fixed — non-null assertions removed,\n  justified disables for HTTP/Wallet boundary code\n- trust402/trust402.ts: 24 errors fixed — FP rewrites for\n  bytesToFieldElements + reduceElements (PKCS7\n[…]\n2),\n  unnecessary optional chains and String() conversion removed\n\n50/84 errors fixed. 35 remaining in trust402/trust402.ts (HTTP gateway\nboundary code in publish/list and detectContentType if-chain).",
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2026-07-16) (#677)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-16T21:33:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df9ca7aecc3c6de4d3d821e75021d0611841d37f",
          "body": "…629)\n\n* docs(sdk): add CHANGELOG migration note for 0.0.14 → 0.0.3x (#587)\n\nFulfills promised follow-up #2 from issue #587: a 'what moved' note\ncovering the 0.0.14 → 0.0.3x transition. Docs-only, single new file.\n\nCovers four real surface changes:\n- Breaking: deep ./dist/* imports removed (0.0.14 →\n[…]\nt() path is untouched.\n\nPart of the Merkle bundle anchor feature: batch N documents into one\nMerkle root on-chain, reducing gas cost ~90%.\n\nFoundry tests: 12/12 pass (8 existing + 4 new bundle tests).",
          "is_bot": false,
          "headline": "docs(sdk): add CHANGELOG migration note for 0.0.14 → 0.0.3x (#587) (#…",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-16T20:02:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6ebf2ea4202bd2352bdfe658aa1b882f8b5ddddc",
          "body": "- FP rewrite: fetchArtifact in sdk/prover.ts (remove if/for/try)\n- Express fix: if→ternary in x402/lemma-submission.ts proveViaRelay\n- Remove unnecessary union type in trust402/pay-types.ts\n- Fix template literal types in seal/bits.ts\n- Remove unnecessary ?? and as cast in x402/lemma-submission.ts",
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2025-07-16) (#676)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-16T20:02:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63cd5acbf117185392deb2785a88dc0bb0e454fb",
          "body": "- Remove unused SampleCopy import, fix unused vars, binding-less catch (demo)\n- Add no-conditional-statements to justified Map-cache disables, add now param to gcJobs, bind void to const (relay/prove.ts)\n- FP rewrite of findMatchingRoute reduce to eliminate if statements (relay/server.ts)\n- FP rewrite of compilePathPattern removing eslint-disable comment (relay/types/http.ts)\n- --fix: remove unnecessary type assertions (demo/translations.ts)",
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2025-07-15) (#674)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-16T05:43:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66bd9ea425bcfa9799404b06310be7c2e22ddaa6",
          "body": "…587) (#622)\n\nFollow-up to #609. Aggre flagged these in #587's latest comment:\n'Out of scope (separate follow-up): crypto.ts:encrypt and disclose.ts\n(sign/verify/reveal/verifyProof) carry the same unused-_client pattern.'\n\nAdds/extends docstrings on all 5 functions explaining:\n- no network I/O (loca\n[…]\n LemmaClient | undefined (createProof passes\n  undefined internally)\n\nDocs-only. No code, signature, or behavior changes. tsc + eslint clean.\nWhitepaper refs: §2.1/§4.4 (crypto), §2.6/§4.6 (disclose).",
          "is_bot": false,
          "headline": "docs(sdk): clarify _client param is not read in encrypt + disclose (#…",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-16T05:41:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d2b65d91a79763025754b8e95872d09dacc7ba5",
          "body": "- demo: fix 3 unused-vars errors (remove SampleCopy import, rename catch var, rename unused param)\n- relay: FP rewrite — convert if-statements to ternaries in prove.ts and server.ts\n- relay: add gcJobs param to satisfy functional/functional-parameters\n- relay: narrow eslint-disable comments (immutable-data only) on Map mutations\n- relay + agent + demo + trust402: auto-fix unnecessary type assertions, unused eslint-disable directives\n- Remove 2 unused eslint-disable directive warnings in relay",
          "is_bot": false,
          "headline": "fix(lint): daily lint fixes (2026-07-12) (#660)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-16T05:41:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e4c406f5201519550b94017e0802121b4992290",
          "body": null,
          "is_bot": false,
          "headline": "Bump @lemmaoracle/seal version to 0.3.7",
          "author_name": "Aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-16T05:24:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3fbd84008fc5a344f38d98cf7c698ec4c87610c",
          "body": "SEAL_CIRCUIT_ID was 'seal-identity-v1' but the registered circuit in\nD1 is 'seal-identity-v2.2'. The zkeys differ (different compilation),\nso provers using v1 would generate proofs that fail verification\nagainst v2.2's vkey.\n\nChanges:\n- proof.ts: SEAL_CIRCUIT_ID = 'seal-identity-v2.2'\n- vkey.ts: imp\n[…]\nv2.2 vkey (QmQsFzT...) instead of v1\n- vkeys/: add seal-identity-v2.2.json from IPFS\n\nVerified: prove(secret, nonce) → valid:true against live\nPOST /v1/proofs/verify with circuitId: seal-identity-v2.2",
          "is_bot": false,
          "headline": "fix(seal): update SEAL_CIRCUIT_ID to seal-identity-v2.2",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-16T05:10:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8d8de60c20c911bdda293c502dc8663e866d19ea",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-15 (#675)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-15T17:02:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "394dbae1c61464e71a04d16b809983db83b547b6",
          "body": null,
          "is_bot": false,
          "headline": "chore(sdk): bump version to 0.0.38",
          "author_name": "Aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-15T03:10:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b778400a45baa72df79405db5c4f909eb4f4a94",
          "body": "…acks\n\nCircuit artifact fetches were failing in the browser because w3s.link\n301-redirects cross-origin to dweb.link, which some browsers reject\nunder CORS re-validation, and ipfs.io has intermittent reachability\nissues from certain networks.\n\nAdd gateway.pinata.cloud (Lemma's artifact upload origin\n[…]\nhe first gateway, and trustless-gateway.link\n(IPFS Foundation's verifiable-response gateway) as an additional\nfallback. Demote w3s.link to last resort.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(sdk): add Pinata and trustless-gateway.link to IPFS gateway fallb…",
          "author_name": "Aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-15T03:03:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "832282f2f0a8dc87fe4f1001b6bdffda493a85ad",
          "body": "…nt TS build in CI\n\n#672 は壊れた content/passthrough を CI の build から除外して緑にした。本 PR は\nそのうち content を「実際にビルド可能」にして戻す(passthrough は据え置き)。\n\n全 workspace を依存順にビルドして棚卸しした結果、モノレポで唯一の実コードバグは\ncontent/src/normalizer.ts の型エラーだった(他は全て正常ビルド)。\n\n- normalizer.ts: `reduceElements` の `elements[0]` / `elements[i]` が\n  noUn\n[…]\n\n\n\nClaude-Session: https://claude.ai/code/session_013fkFD51i3F3R3SHUvwcqMD\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(content): fix unchecked index access in normalizer, restore conte…",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-15T01:17:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "afdc708fad2c700117299b72c8cc6695f8794a61",
          "body": "AI Now Institute が 2026-07-08 に公開した PoC「Friendly Fire」。開発者が\nClaude Code / Codex に第三者ライブラリのセキュリティ審査を頼むと、審査対象に\n仕込まれた悪性バイナリをエージェントが「安全」と誤判定してホスト上で実行する。\nPillar 01(来歴)/ code-provenance。EN + JA。\n\n一次ソース照合済み(すべて原典で確認、事実のズレなし):\n- AI Now Institute 原典(発行日 2026-07-08・著者 Milanov/Khlaaf・CLI 版・モデル4種)\n- GitHub 再現 r\n[…]\n\n\n\nClaude-Session: https://claude.ai/code/session_013fkFD51i3F3R3SHUvwcqMD\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Critical Brief No.102: Friendly Fire(防御用エージェントの RCE) (#668)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-15T01:00:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c10a72677757b2905240e5f6e8b117c0691aa695",
          "body": "* fix(ci): attestation/roles の壊れた build スクリプトを削除\n\nCI に `pnpm -r build`(#—、sdk の dist/ を test 前に作る目的)が入ったことで、\nこれまで一度も実行されず眠っていた壊れたビルドスクリプトが露出した。\n\npackages/attestation と packages/roles は `\"build\": \"tsc -p tsconfig.json\"` を\n持つが、どちらも src/ が無く(circuits のみ)tsconfig.json も存在しない。\n→ `error TS5058: The specif\n[…]\nession: https://claude.ai/code/session_013fkFD51i3F3R3SHUvwcqMD\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): remove broken tsc build scripts from attestation/roles",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-15T00:48:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fd6598631647f349df9f41e78c36b3d58fc8c76b",
          "body": null,
          "is_bot": false,
          "headline": "chore(seal): bump CIRCUIT_ID to seal-identity-v2.2",
          "author_name": "Aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-15T00:44:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2661fd3e64b1ec4a63ccd3e734e2a42483900752",
          "body": "- Add VKEY_PATH and upload seal-identity_vkey.json via Pinata\n- Include vkey in artifact location for self-contained circuit registration\n- Bump CIRCUIT_ID to seal-identity-v2.1",
          "is_bot": false,
          "headline": "feat(seal): upload vkey to IPFS alongside wasm/zkey",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-15T00:28:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17e4af404b9e466fa7b9e3421deaf6aa1cb99706",
          "body": "* fix: sync typescript-eslint to ^8.64.0 matching pnpm-lock.yaml\n\npnpm-lock.yaml was bumped to 8.64.0 in #667 but package.json stayed\nat 8.63.0, causing --frozen-lockfile CI failures on all PRs.\n\n* fix(ci): add pnpm -r build before tests\n\npackages like @lemmaoracle/sdk need dist/ built before dependents\nlike data-commitment can import them. CI had no build step between\ninstall and test, so sdk/dist was missing in clean environments.",
          "is_bot": false,
          "headline": "fix(ci): add pnpm -r build step before tests (#670)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-15T00:15:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c45d399af538283c6cb1f2dfd8bc9e83132fb52",
          "body": "pnpm-lock.yaml was bumped to 8.64.0 in #667 but package.json stayed\nat 8.63.0, causing --frozen-lockfile CI failures on all PRs.",
          "is_bot": false,
          "headline": "fix: sync typescript-eslint to ^8.64.0 matching pnpm-lock.yaml (#669)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-15T00:07:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b19914761d683e2b375bb030cd52129c6aa16f2",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-14 (#667)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-14T17:02:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38d3e0d0d3b15659e00b8f63eada69cf2c6771bb",
          "body": "Three endpoints that existed in code but not in spec: GET /v1/verification-count, GET /v1/document-count, GET /v1/documents/stats. Also regenerates the bundle to fix #665's createdAt→registeredAt that didn't make it into the bundled JSON.",
          "is_bot": false,
          "headline": "spec: add counter endpoints (V, I/N, per-scope stats) (#666)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-14T15:20:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "774feef8fbbeac6f0165c8097545a7b213897132",
          "body": "… (#665)\n\nGET /v1/documents/:docHash(#107)の返す形が、検証ページの契約と違う。\nstatus も onchainTxHash も無く、登録日時は createdAt という名前なので、受け手は\n「登録済みかどうか」を判定できない。実際 AI業務日報の検証ページは status で分岐するため、\n登録済みの日報が「照合を待っています」と表示される(安全側に外してはいるが事実と違う)。\n\n- status: registered / anchored / pending の3値。tx が確定していないものを anchored と\n  呼ばない。オンチェーン\n[…]\n\n\n\nClaude-Session: https://claude.ai/code/session_013fkFD51i3F3R3SHUvwcqMD\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "spec: GetDocumentResponse に status / onchainTxHash / registeredAt を追加…",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-14T11:38:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bfd6e24be18dbcf98f2a1b4b52d8294e858195d9",
          "body": "…#663)\n\nAdds public read endpoint for registered documents so that third parties\ncan verify that a docHash was registered on Lemma without authentication.\n\n- New GetDocumentResponse schema (docHash, schemaId, issuerId, subjectId,\n  commitmentRoot, chainId, createdAt — no internal fields exposed)\n- New GET /v1/documents/{docHash} path with security: [] (public)\n- TypeScript type in packages/spec/src/index.ts\n\nCloses #105",
          "is_bot": false,
          "headline": "feat(spec): add GET /v1/documents/:docHash — public document lookup (…",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-14T06:49:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff326bbdf2cc37bb9045ab09886c50847f1df804",
          "body": null,
          "is_bot": false,
          "headline": "chore: update submodules 2026-07-13",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-13T20:32:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8e957cea9705094d22ae28491c4be027e13b142",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-13 (#662)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-13T17:02:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0eb9369f1dc603477508ec5b63562944320287bb",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-12 (#661)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-12T17:02:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d407825070b792053bc42f1fa56496c80f72c38a",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-11 (#659)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-11T17:02:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d28d6ba79e6c5a3756b68e01675610c67a060e87",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-10 (#658)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-10T17:02:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a9b6eafb75803a71b0d2619f4c30a52ca23dac0",
          "body": "* feat(briefs): No.093 A7A5 ruble-stablecoin sanctions evasion (Pillar 04)\n\nThis week's Brief. Only the A7A5 case from the 2026-07-03 candidate draft\nwas written — the other candidate (No.093 draft on AI chatbot political\nbias) was dropped after primary-source verification: the WaPo test it\ncited di\n[…]\n.com>\nClaude-Session: https://claude.ai/code/session_01FLcqXYL3EEYn5AsrpMV2eE\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(briefs): No.093 A7A5 ルーブル建てステーブルコイン制裁回避(Pillar 04) (#618)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-10T01:30:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7cc60666ea4be2f9c49943d075b35903c30b605d",
          "body": "* briefs: add Critical Brief 099 / 100 / 101 (JA+EN)\n\n- 099 Agentjacking(Sentry MCP 経由の偽エラー報告でコーディングエージェントが\n  攻撃者コマンドを実行)— Pillar 02 / ai-decision-integrity / Pack C\n- 100 Aptos Move VM 型混同(約3,000ドル検証環境で再現・下流波及リスク)\n  — Pillar 01 / bridge-config-trust / Pack A\n- 101 Paysafe 偽 SDK(決済SDKを装う17パッケージが決済AP\n[…]\nession: https://claude.ai/code/session_01FLcqXYL3EEYn5AsrpMV2eE\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "briefs: add Critical Brief 099 / 100 / 101 (JA+EN) (#657)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-10T01:17:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "acd2e9e48ca72738566573572ba54826cb2eb39f",
          "body": null,
          "is_bot": false,
          "headline": "chore: pnpm update 2026-07-09 (#656)",
          "author_name": "aggre",
          "author_login": "aggre",
          "committed_at": "2026-07-09T17:02:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef6130dc95c8d8cb05714e149f3d69c2943d77e0",
          "body": "業務LP のヒーローを authenticity 起点に寄せた(#654)のに合わせ、共有カード\n(OG画像)も privacy/委任フレームから本物×証明へ更新。ヒーロー H1 と一致。\n\n- title: 「「AIは不安」を「任せて安心」へ。」→「本物のデータだけを、AIに。」\n- tagline: 「社内のデータは外に出さず…」→「中身を渡さず、「本物である」ことだけを証明する。」\n- EN も並行更新。label「AI導入ガイド」・レイアウトは不変。\n\n生成 PNG を目視確認済み(本物=アクセント)。build 緑(360 pages)。\n\n\nClaude-Session: https://claude.ai/code/session_01FLcqXYL3EEYn5AsrpMV2eE\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "copy(og/ai-gyomu-anshin): OG画像を本物×証明ポジションに更新 (#655)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-09T08:39:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d625a2fef0fdc35edad2fb55683b1125bfc3009f",
          "body": "* copy(ai-gyomu-anshin): 本物×証明ポジションへLPコピー調整(変更1/2/3)\n\n業務LP を privacy 起点 → authenticity 起点に。コピーのみ・レイアウト/価格/\n機能/CTA/構造は不変(既存クラス流用、新規CSSなし)。\n\n- 変更2(Option A)ヒーロー主従調整:\n  H1「データは渡さない。それでも、取引は前に進む。」→「本物のデータだけを、AIに。」\n  sub → 「データは渡さない。中身を見せずに『本物であること』だけを証明する、\n  AI のための信頼インフラ。」\n- 変更1+3 フッター近傍に会社紹介ブロックを新設:\n \n[…]\nession: https://claude.ai/code/session_01FLcqXYL3EEYn5AsrpMV2eE\n\n---------\n\nCo-authored-by: Mayumi Hara <mayumi@Mayumis-iMac.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "copy(ai-gyomu-anshin): 本物×証明ポジションへLPコピー調整(変更1/2/3) (#654)",
          "author_name": "Mayumi",
          "author_login": "yumemayu",
          "committed_at": "2026-07-09T08:29:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 0,
      "commits_last_year": 1281,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 22,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@lemmaoracle/mcp",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@lemmaoracle/mcp",
          "is_deprecated": false,
          "latest_version": "0.0.23",
          "repository_url": "https://github.com/lemmaoracle/lemma",
          "versions_count": 21,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1296,
          "first_published_at": "2026-04-26T03:02:02.121000Z",
          "latest_published_at": "2026-07-21T11:52:26.117000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "@lemmaoracle/sdk",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@lemmaoracle/sdk",
          "is_deprecated": false,
          "latest_version": "0.1.1",
          "repository_url": "https://github.com/lemmaoracle/lemma",
          "versions_count": 40,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2413,
          "first_published_at": "2026-03-16T05:38:00.037000Z",
          "latest_published_at": "2026-07-29T11:03:47.130000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "@lemmaoracle/seal",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "lemma",
            "seal",
            "auth",
            "zk",
            "circuit",
            "sign-in"
          ],
          "ecosystem": "npm",
          "matches_repo": null,
          "registry_url": "https://www.npmjs.com/package/@lemmaoracle/seal",
          "is_deprecated": false,
          "latest_version": "0.3.8",
          "repository_url": null,
          "versions_count": 15,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1649,
          "first_published_at": "2026-05-16T04:06:40.881000Z",
          "latest_published_at": "2026-07-21T11:52:11.223000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "@lemmaoracle/spec",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@lemmaoracle/spec",
          "is_deprecated": false,
          "latest_version": "0.1.0",
          "repository_url": "https://github.com/lemmaoracle/lemma",
          "versions_count": 36,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2709,
          "first_published_at": "2026-03-16T05:37:19.600000Z",
          "latest_published_at": "2026-07-29T10:58:51.846000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "@lemmaoracle/agent",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "lemma",
            "agent",
            "identity",
            "credential",
            "authority",
            "schema",
            "wasm"
          ],
          "ecosystem": "npm",
          "matches_repo": null,
          "registry_url": "https://www.npmjs.com/package/@lemmaoracle/agent",
          "is_deprecated": false,
          "latest_version": "0.0.35",
          "repository_url": null,
          "versions_count": 14,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 915,
          "first_published_at": "2026-04-30T11:03:10.172000Z",
          "latest_published_at": "2026-07-21T11:52:14.764000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-05-17",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 3
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "packages/agent/tsconfig.json",
        "packages/blog-article/circuits/tsconfig.json",
        "packages/canonical-sort/tsconfig.json",
        "packages/content/circuits/tsconfig.json",
        "packages/content/tsconfig.json",
        "packages/data-commitment/tsconfig.json",
        "packages/demo/tsconfig.json",
        "packages/feeds/tsconfig.json",
        "packages/fetcher/tsconfig.json",
        "packages/mcp/tsconfig.json",
        "packages/parser/tsconfig.json",
        "packages/passthrough/tsconfig.json",
        "packages/relay/tsconfig.json",
        "packages/sdk/tsconfig.json",
        "packages/seal/tsconfig.json",
        "packages/spec/tsconfig.json",
        "packages/trust402/tsconfig.json",
        "packages/web/tsconfig.json",
        "packages/x402/tsconfig.json"
      ],
      "toolchain_manifests": [
        "packages/agent/Cargo.toml",
        "packages/agent/normalize/Cargo.toml",
        "packages/canonical-sort/normalize/Cargo.toml",
        "packages/passthrough/Cargo.toml"
      ],
      "largest_source_bytes": 120192,
      "source_files_sampled": 247,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        ".cursorrules",
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 772
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 4
          },
          {
            "name": "underscore",
            "direct": false,
            "version": "1.13.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-qpx9-hpmf-5gmw"
            ],
            "fixed_version": "1.13.8",
            "advisory_count": 1,
            "oldest_advisory_days": 148
          },
          {
            "name": "@hono/node-server",
            "direct": false,
            "version": "1.19.17",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.9,
            "advisory_ids": [
              "GHSA-frvp-7c67-39w9"
            ],
            "fixed_version": "2.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 8
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 2,
          "moderate": 1
        },
        "advisory_count": 3,
        "affected_count": 3,
        "assessed_count": 198,
        "malicious_count": 0,
        "assessed_package": "npm:@lemmaoracle/mcp@0.0.23",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "wasm-bindgen",
          "manifest": "packages/agent/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "js-sys",
          "manifest": "packages/agent/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "serde",
          "manifest": "packages/agent/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "packages/agent/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/agent/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/agent/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "poseidon-lite",
          "manifest": "packages/agent/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.3.0"
        },
        {
          "name": "ramda",
          "manifest": "packages/agent/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.30.1"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/attestation/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/attestation/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "snarkjs",
          "manifest": "packages/attestation/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.7.6"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/blog-article/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/blog-article/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "poseidon-lite",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.3.0"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/canonical-sort",
          "manifest": "packages/data-commitment/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/data-commitment/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@noble/hashes",
          "manifest": "packages/data-commitment/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.0"
        },
        {
          "name": "poseidon-lite",
          "manifest": "packages/data-commitment/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.0"
        },
        {
          "name": "@lemmaoracle/fetcher",
          "manifest": "packages/feeds/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/feeds/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@trust402/sdk",
          "manifest": "packages/feeds/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "poseidon-lite",
          "manifest": "packages/feeds/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.0"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/fetcher/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.0.31"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.0.30"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "agents",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.11.4"
        },
        {
          "name": "ramda",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.30.1"
        },
        {
          "name": "zod",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.24.0"
        },
        {
          "name": "@huggingface/transformers",
          "manifest": "packages/parser/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.8.0"
        },
        {
          "name": "onnxruntime-node",
          "manifest": "packages/parser/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.21.0"
        },
        {
          "name": "ramda",
          "manifest": "packages/parser/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.30.1"
        },
        {
          "name": "wasm-bindgen",
          "manifest": "packages/passthrough/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "js-sys",
          "manifest": "packages/passthrough/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/passthrough/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/passthrough/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "ramda",
          "manifest": "packages/passthrough/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.30.1"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/relay/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "ramda",
          "manifest": "packages/relay/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.30.1"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/roles/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/roles/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "snarkjs",
          "manifest": "packages/roles/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.7.6"
        },
        {
          "name": "@docknetwork/crypto-wasm",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.35.0"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@noble/ciphers",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.0"
        },
        {
          "name": "@noble/curves",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.8.0"
        },
        {
          "name": "@noble/hashes",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.0"
        },
        {
          "name": "buffer",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.3"
        },
        {
          "name": "poseidon-lite",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.0"
        },
        {
          "name": "ramda",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.30.1"
        },
        {
          "name": "snarkjs",
          "manifest": "packages/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.7.5"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/seal/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/seal/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/sdk",
          "manifest": "packages/trust402/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@lemmaoracle/spec",
          "manifest": "packages/trust402/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@noble/hashes",
          "manifest": "packages/trust402/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.0"
        },
        {
          "name": "poseidon-lite",
          "manifest": "packages/trust402/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.0"
        }
      ],
      "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": 2,
        "merged_prs": 680,
        "open_issues": 1,
        "closed_ratio": 0.8,
        "closed_issues": 4,
        "closed_unmerged_prs": 29
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "aggre",
          "commits": 641,
          "avatar_url": "https://avatars.githubusercontent.com/u/1970283?v=4"
        },
        {
          "type": "User",
          "login": "yumemayu",
          "commits": 472,
          "avatar_url": "https://avatars.githubusercontent.com/u/33956553?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        },
        {
          "type": "User",
          "login": "cursoragent",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/199161495?v=4"
        }
      ],
      "contributors_sampled": 4,
      "top_contributor_share": 0.572
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "package-lock.json",
        "pnpm-lock.yaml"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 8,
            "reason": "binaries present in source code",
            "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": 9,
            "reason": "23 out of 24 merged PRs checked by a CI test -- score normalized to 9",
            "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": 1,
            "reason": "Found 3/30 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 5 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 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": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "134 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "926478b2408863158384f4b3ee46507c79b9afc7",
        "ran_at": "2026-07-29T18:21:13Z",
        "aggregate_score": 4.2,
        "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-29T17:06:46Z",
      "oldest_open_prs": [
        {
          "number": 671,
          "created_at": "2026-07-15T00:16:29Z",
          "last_comment_at": "2026-07-25T17:06:50Z",
          "last_comment_author": "aggre"
        },
        {
          "number": 715,
          "created_at": "2026-07-29T15:18:38Z",
          "last_comment_at": "2026-07-29T15:20:10Z",
          "last_comment_author": "cloudflare-workers-and-pages"
        }
      ],
      "last_merged_pr_at": "2026-07-29T17:02:29Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 678,
          "created_at": "2026-07-16T22:37:26Z",
          "last_comment_at": "2026-07-22T17:05:02Z",
          "last_comment_author": "aggre"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/lemmaoracle/lemma",
    "host": "github.com",
    "name": "lemma",
    "owner": "lemmaoracle"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 49,
        "vitality": 48,
        "community": 32,
        "governance": 59,
        "engineering": 85
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 48,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "commits_last_year": 1281,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 22
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "22/52 weeks with commits",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 22
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1281 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1281
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "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": 1,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "at_risk",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 44,
            "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": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "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": 66,
            "inputs": {
              "packages": [
                "@lemmaoracle/mcp",
                "@lemmaoracle/sdk",
                "@lemmaoracle/seal",
                "@lemmaoracle/spec",
                "@lemmaoracle/agent"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 8982
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "8,982 downloads/month across npm",
                "points": 52.7,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 8982,
                      "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 59,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 4,
              "top_contributor_share": 0.572
            },
            "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 57% of commits",
                "points": 9.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 57
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "4 contributors",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 5 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "merged_prs": 680,
              "open_issues": 1,
              "closed_issues": 4,
              "issue_closed_ratio": 0.8,
              "closed_unmerged_prs": 29
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "80% of issues closed",
                "points": 37.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 80
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "680/709 decided PRs merged",
                "points": 36.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 680,
                      "decided": 709
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 3/30 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "followers": 1,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "lemmaoracle",
              "public_repos": 8,
              "account_age_days": 163
            },
            "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": "1 followers of lemmaoracle",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "lemmaoracle"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "8 public repos, account ~0 yr old",
                "points": 7.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 8
                    }
                  },
                  {
                    "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": [
                "@lemmaoracle/mcp",
                "@lemmaoracle/sdk",
                "@lemmaoracle/seal",
                "@lemmaoracle/spec",
                "@lemmaoracle/agent"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "5 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 5,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "40 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 40
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 85,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "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": "eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "23 out of 24 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "ai-agents",
                "did",
                "provenance",
                "rag",
                "selective-disclosure",
                "trusted-web",
                "typescript",
                "verifiable-ai",
                "zero-knowledge-proofs",
                "zk"
              ],
              "has_wiki": false,
              "homepage": "https://lemma.frame00.com/",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://lemma.frame00.com/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 49,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 42,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.2
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6,
                "status": "partial",
                "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": "23 out of 24 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 3/30 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 5 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file 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": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "134 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Matched the npm:@lemmaoracle/mcp@0.0.23 runtime dependency closure — what installing the published package pulls in — 198 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@lemmaoracle/mcp@0.0.23",
                  "assessed": 198
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 76,
            "inputs": {
              "source": "osv",
              "advisories": 3,
              "affected_packages": 3,
              "assessed_packages": 198,
              "unassessed_packages": 0,
              "affected_by_severity": "high 2, moderate 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "3 affected: brace-expansion 2.1.2 (high 7.5), underscore 1.13.6 (high 7.5), @hono/node-server 1.19.17 (moderate 5.9)",
                "points": 7.5,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 3,
                      "packages": "brace-expansion 2.1.2 (high 7.5), underscore 1.13.6 (high 7.5), @hono/node-server 1.19.17 (moderate 5.9)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 148 days ago",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 148
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 198,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 77,
        "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.97,
              "agent_instruction_files": [
                ".cursorrules",
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 772
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".cursorrules, AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".cursorrules, 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": "97 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 97,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json",
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "packages/agent/tsconfig.json",
                "packages/blog-article/circuits/tsconfig.json",
                "packages/canonical-sort/tsconfig.json",
                "packages/content/circuits/tsconfig.json",
                "packages/content/tsconfig.json",
                "packages/data-commitment/tsconfig.json",
                "packages/demo/tsconfig.json",
                "packages/feeds/tsconfig.json",
                "packages/fetcher/tsconfig.json",
                "packages/mcp/tsconfig.json",
                "packages/parser/tsconfig.json",
                "packages/passthrough/tsconfig.json",
                "packages/relay/tsconfig.json",
                "packages/sdk/tsconfig.json",
                "packages/seal/tsconfig.json",
                "packages/spec/tsconfig.json",
                "packages/trust402/tsconfig.json",
                "packages/web/tsconfig.json",
                "packages/x402/tsconfig.json"
              ],
              "agent_commit_share": 0.26,
              "toolchain_manifests": [
                "packages/agent/Cargo.toml",
                "packages/agent/normalize/Cargo.toml",
                "packages/canonical-sort/normalize/Cargo.toml",
                "packages/passthrough/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "packages/agent/Cargo.toml, packages/agent/normalize/Cargo.toml, packages/canonical-sort/normalize/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "packages/agent/Cargo.toml, packages/agent/normalize/Cargo.toml, packages/canonical-sort/normalize/Cargo.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "packages/agent/tsconfig.json, packages/blog-article/circuits/tsconfig.json, packages/canonical-sort/tsconfig.json, packages/content/circuits/tsconfig.json, packages/content/tsconfig.json, packages/data-commitment/tsconfig.json, packages/demo/tsconfig.json, packages/feeds/tsconfig.json, packages/fetcher/tsconfig.json, packages/mcp/tsconfig.json, packages/parser/tsconfig.json, packages/passthrough/tsconfig.json, packages/relay/tsconfig.json, packages/sdk/tsconfig.json, packages/seal/tsconfig.json, packages/spec/tsconfig.json, packages/trust402/tsconfig.json, packages/web/tsconfig.json, packages/x402/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "packages/agent/tsconfig.json, packages/blog-article/circuits/tsconfig.json, packages/canonical-sort/tsconfig.json, packages/content/circuits/tsconfig.json, packages/content/tsconfig.json, packages/data-commitment/tsconfig.json, packages/demo/tsconfig.json, packages/feeds/tsconfig.json, packages/fetcher/tsconfig.json, packages/mcp/tsconfig.json, packages/parser/tsconfig.json, packages/passthrough/tsconfig.json, packages/relay/tsconfig.json, packages/sdk/tsconfig.json, packages/seal/tsconfig.json, packages/spec/tsconfig.json, packages/trust402/tsconfig.json, packages/web/tsconfig.json, packages/x402/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "26 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 26,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "primary_language": "Astro",
              "largest_source_bytes": 120192,
              "source_files_sampled": 247,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Astro with type-check config (packages/agent/tsconfig.json, packages/blog-article/circuits/tsconfig.json, packages/canonical-sort/tsconfig.json, packages/content/circuits/tsconfig.json, packages/content/tsconfig.json, packages/data-commitment/tsconfig.json, packages/demo/tsconfig.json, packages/feeds/tsconfig.json, packages/fetcher/tsconfig.json, packages/mcp/tsconfig.json, packages/parser/tsconfig.json, packages/passthrough/tsconfig.json, packages/relay/tsconfig.json, packages/sdk/tsconfig.json, packages/seal/tsconfig.json, packages/spec/tsconfig.json, packages/trust402/tsconfig.json, packages/web/tsconfig.json, packages/x402/tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "packages/agent/tsconfig.json, packages/blog-article/circuits/tsconfig.json, packages/canonical-sort/tsconfig.json, packages/content/circuits/tsconfig.json, packages/content/tsconfig.json, packages/data-commitment/tsconfig.json, packages/demo/tsconfig.json, packages/feeds/tsconfig.json, packages/fetcher/tsconfig.json, packages/mcp/tsconfig.json, packages/parser/tsconfig.json, packages/passthrough/tsconfig.json, packages/relay/tsconfig.json, packages/sdk/tsconfig.json, packages/seal/tsconfig.json, packages/spec/tsconfig.json, packages/trust402/tsconfig.json, packages/web/tsconfig.json, packages/x402/tsconfig.json",
                      "language": "Astro"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/247 source files over 60KB",
                "points": 54.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 247,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "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": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch crates package 'lemma-agent' from its registry",
    "Could not fetch npm package '@lemmaoracle/feeds' from its registry",
    "Could not fetch npm package '@lemmaoracle/roles' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-29T18:21:33.394626Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/l/lemmaoracle/lemma.svg",
  "full_name": "lemmaoracle/lemma",
  "license_state": "custom",
  "license_spdx": null
}

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.