Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-28 15:34 UTC

sailor-labs / sunsail

Blazing fast, utterly minimalist TRON development framework written in Go.

GoApache-2.0★ 1 estrella⑂ 1 forkdesde jul 2026Ver en GitHub ↗

sailor-labs/sunsail tiene un índice de salud de 54 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (77/100) y la más baja, Community & Adoption (33/100). Se actualizó por última vez hace 8 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

54
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

SailorLabsOrganización
1 seguidor1 repositorio públicodesde jul 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ón
Gogithub.com/sailor-labs/sunsailv0.1.1-2hace 8 días

Métricas por categoría

Vitalidad

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

64Moderado · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 8 días
0.7/36Cadencia de commits — 1/52 semanas con commits
16/18Volumen de commits — 59 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year59
human_commit_share1
days_since_last_push8
active_weeks_last_year1
Cómo se puntúa
27/27Publica versiones — 2 versiones publicadas
36/36Recencia de las versiones — última versión hace 8 días
27/27Cadencia de publicación — una versión cada ~0 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count2
latest_release_tagv0.1.1
releases_from_tagsno
days_since_latest_release8
mean_days_between_releases0

Comunidad y Adopción

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

33En 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
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
18/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_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

48En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 2/2 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs2
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
2.2/25Alcance del propietario — 1 seguidores de sailor-labs
2.2/25Trayectoria — 1 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers1
owner_typeOrganization
is_verified
owner_loginsailor-labs
public_repos1
account_age_days8
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 8 días
12/20Historial de versiones — 2 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/sailor-labs/sunsail
ecosystemsgo
any_deprecatedno
min_days_since_publish8

Calidad de Ingeniería

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

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

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://sailor-labs.github.io/sunsail/
10/10Descripción del repositorio
10/10Topics — 8 topics
0/10Wiki
Datos de entrada utilizados
topicsdeveloper-tools, foundry, go, golang, smart-contracts, solidity, tron, tvm
has_wikino
homepagehttps://sailor-labs.github.io/sunsail/
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?

42En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 2 out of 2 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
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
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,2
Excluidos de la puntuación (sin datos o no aplicable): packaging. Los pesos restantes se han renormalizado.

Preparación para IA

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

75Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 59 de 59 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes16.237
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 58 de los últimos 59 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
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,983
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
53.6/55Tamaños de archivo manejables — 3/119 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes360.432
source_files_sampled119
oversized_source_files3
Cómo se puntúa
40/40Esquema de API (OpenAPI/GraphQL/proto) — proto/api/api.proto, proto/core/Discover.proto, proto/core/Tron.proto, proto/core/contract/account_contract.proto, proto/core/contract/asset_issue_contract.proto, proto/core/contract/balance_contract.proto, proto/core/contract/common.proto, proto/core/contract/exchange_contract.proto, proto/core/contract/market_contract.proto, proto/core/contract/proposal_contract.proto, proto/core/contract/shield_contract.proto, proto/core/contract/smart_contract.proto, proto/core/contract/storage_contract.proto, proto/core/contract/vote_asset_contract.proto, proto/core/contract/witness_contract.proto
0/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signalno
api_schema_filesproto/api/api.proto, proto/core/Discover.proto, proto/core/Tron.proto, proto/core/contract/account_contract.proto, proto/core/contract/asset_issue_contract.proto, proto/core/contract/balance_contract.proto, proto/core/contract/common.proto, proto/core/contract/exchange_contract.proto, proto/core/contract/market_contract.proto, proto/core/contract/proposal_contract.proto, proto/core/contract/shield_contract.proto, proto/core/contract/smart_contract.proto, proto/core/contract/storage_contract.proto, proto/core/contract/vote_asset_contract.proto, proto/core/contract/witness_contract.proto

Datos clave

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

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

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-28 15:34 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests2 out of 2 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
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
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Dependencias directas 9
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/decred/dcrd/dcrec/secp256k1/v4v4.4.1go.mod
Gogithub.com/holiman/uint256v1.3.2go.mod
Gogithub.com/pelletier/go-toml/v2v2.4.3go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogithub.com/ulikunitz/xzv0.5.15go.mod
Gogolang.org/x/cryptov0.54.0go.mod
Gogolang.org/x/syncv0.22.0go.mod
Gogoogle.golang.org/grpcv1.82.1go.mod
Gogoogle.golang.org/protobufv1.36.11go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "developer-tools",
        "foundry",
        "go",
        "golang",
        "smart-contracts",
        "solidity",
        "tron",
        "tvm"
      ],
      "is_fork": false,
      "size_kb": 2303,
      "has_wiki": false,
      "homepage": "https://sailor-labs.github.io/sunsail/",
      "languages": {
        "Go": 633666,
        "Python": 7638,
        "Makefile": 4287,
        "Solidity": 4057
      },
      "pushed_at": "2026-07-20T09:30:25Z",
      "created_at": "2026-07-19T08:44:28Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-27T22:53:03Z",
      "description": "Blazing fast, utterly minimalist TRON development framework written in Go.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "sailorlabs.xyz",
      "name": "SailorLabs",
      "type": "Organization",
      "login": "sailor-labs",
      "company": null,
      "location": null,
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/306890019?v=4",
      "created_at": "2026-07-19T21:33:32Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 8
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-07-20T08:44:28Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-20T08:09:19Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "5738098cc1a2cf77da0eeea8719f253da95ff524",
          "body": "Add a public documentation site (https://sailor-labs.github.io/sunsail/) built\nwith MkDocs Material and deployed to GitHub Pages via GitHub Actions.\n\n- mkdocs.yml: theme (Inter Tight + JetBrains Mono, custom cobalt palette, dark\n  toggle), extensions, and a nav that organizes the 12 existing referen\n[…]\npasses (no broken links, no warnings; every doc in nav).\n\n\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: MkDocs Material site with SailorLabs landing + Pages deploy (#2)",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T09:30:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9839e2482046c279c771bfabfb4680aef2504005",
          "body": "Fix #2 — sun --version no longer shows 0.0.0-dev after 'go install'.\nresolveVersion() prefers the build-time ldflag, then\ndebug.ReadBuildInfo().Main.Version (populated by 'go install' — a tag or a\npseudo-version), then the dev marker. Makefile is untouched.\n\nFix #4 — solc/aderyn first-run downloads \n[…]\nnonical EIP-55 vectors; added to text and --json output.\n\n\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: version fallback, download progress, EIP-55 in sonar address (#1)",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T08:38:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "be9248866cd2ce4970675f3d2697d0c61c733ef5",
          "body": "… address-derivation notes\n\n- Fix the sun estimate example: the CLI is positional\n  (estimate <contract> \"<signature>\" [args...] --network <net>), not the\n  --contract/--sig/--args flags the README showed (verified against\n  internal/cli/estimate.go).\n- Document 'go install github.com/sailor-labs/su\n[…]\n time\n  (CREATE = f(txid), fresh ref-block per broadcast).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "docs: fix estimate example, document go install, add deploy-order and…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T08:17:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "af29ca7f984f11ce4dc2ae787de1c4e0486c9a08",
          "body": "Replace the centered logo + H1 with a borderless two-cell HTML table\n(logo left, title + description right). Also updates the logo PNG to a\nre-optimized, smaller-byte version of the same image.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "docs: left-align logo beside title in README",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T07:28:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dbdb7d5c47acaeb113cf47425477e11927dc8cfd",
          "body": "Centered logo above the title; relative path so it travels with the repo.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "docs: add SunSail logo to README",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T07:13:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "96f6a450a5b238d327b6905b026b9ed7fe12a398",
          "body": "Add docs/CI.md (the three workflows, the four nightly secrets and where\nthey are configured, the intentional TRON_PRO_API_KEY omission, and the\nhonest Windows cross-compiled-but-not-CI-executed boundary). README gains\na CI badge, the Windows note, and CI.md in the docs index. CONTRIBUTING\nnotes PRs \n[…]\nction\nis rewritten to point at the now-existing workflows.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "docs: CI pipeline reference, README badge, and contributing gate",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T06:55:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4096135915e1a9e94ab6f0324390cebd668d1554",
          "body": "On a v* tag push: 'make release' cross-compiles the 6-binary static\nmatrix + SHA256SUMS (CGO_ENABLED=0), then softprops/action-gh-release@v2\nattaches release/sun-* and release/SHA256SUMS to the GitHub Release.\npermissions: contents: write (needed to create the release).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "ci: tag-triggered static release publishing",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T06:55:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "af38e622c5855adc4c198d3edce0995658ac5888",
          "body": "Scheduled-only (cron 0 3 * * *, 03:00 UTC): no push/PR/dispatch trigger.\nTwo parallel jobs — 'differential' runs 'make differential' against Nile\nwith NILE_GRPC/NILE_SOLIDITY_GRPC/NILE_JSONRPC/NILE_PRIVATE_KEY injected\nfrom GitHub Actions secrets (names match the suite's env vars 1:1; key\nnever echo\n[…]\ntly blocks nothing; it is visible in the Actions tab only.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "ci: nightly Nile differential and fuzz workflow",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T06:55:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e553ac17d46c2ed38626ba014d93ccd84a89e78e",
          "body": "Runs the existing 'make check' and 'make e2e' targets on every push to\nmain and every pull request. Fully hermetic (no network, no secrets),\nubuntu-latest, permissions: contents: read. install-tools builds\nstaticcheck with the module toolchain and its bin dir is added to PATH so\nthe bare-name staticcheck invocation in 'make check' resolves.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "ci: hermetic check + e2e gate on push and PR to main",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-20T06:55:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "568050210ceba9e7c3498c20bba2102701c17c73",
          "body": null,
          "is_bot": false,
          "headline": "docs: update security contact email and format supported versions table",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T22:42:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "071219aa5d4cb152fe8599e5e7ede8d0b45528cf",
          "body": "Repository transfer to the sailor-labs GitHub organization. The technical\nstring sailorlabs becomes sailor-labs everywhere it is a path: the go.mod\nmodule, every import, the Makefile's protoc module/M mappings (the vendored\nprotos carry upstream tronprotocol go_package options overridden there —\nnot\n[…]\nge. Brand prose is\nuntouched: LICENSE keeps \"Copyright 2026 SailorLabs\".\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "chore: rename module path to github.com/sailor-labs/sunsail",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:41:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "70a55a6dee26c52635f157bc8463a3cbfa3531be",
          "body": "sun init now materializes a project README (layout, sail.toml, everyday\ncommands, the key-handling note) from the embedded templates. All three\nguards follow in the same commit: the regen-fixtures provenance list gains\nthe file's hash (drift guard), the e2e init_tree golden is regenerated, and\nthe s\n[…]\npiled source\nchanged — provenance.json is the only replay-fixture delta.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(scaffold): README template in the scaffolded project",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:32:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "89a46f92d7bc16833a444eece19798f57a32859a",
          "body": "… 0.1.0\n\nThe five root files that make the repository publishable. README is the\ntechnical entry point (the seven commands with examples, the end-to-end\nflow, the naming trio sun/sail.toml/sail.sol, networks, docs index).\nCONTRIBUTING codifies the gates (make check + check-invariants), the\nhermetic-\n[…]\nOG records [0.1.0]\n2026-07-19 with errata E1-E5 as documented behaviors.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "docs: README, CONTRIBUTING, SECURITY, LICENSE (Apache-2.0), CHANGELOG…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:32:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8774830284f321a5e7014c9f44b9d9cb864bfbe0",
          "body": "…retire the sprint plan\n\nErratum E5 corrects the release-size criterion to <18 MB: the original\n<12 MB predated the measured weight of the mandated stack (grpc + protobuf\nruntime + vendored-TRON-proto descriptors + Go runtime/TLS; 15.5 MB at S6\nHEAD, 15.9 MB at S7, static/stripped) — adjusted to mea\n[…]\nhe real project state (S0–S7 complete; CI is the\nisolated final sprint).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "docs: erratum E5 (<18 MB release criterion), xz as direct dep in §4, …",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:32:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e1c03b8a493d97cd620e556862056b4e91c87c8e",
          "body": "… results\n\nARCHITECTURE: Erratum E3 — the §5.3 \"compiler-emulated 0xff for new{salt}\"\nconvention does not exist on chain: both syntactic paths derived 0x41\naddresses on Nile (real deploys, block 69329318); sonar create2's warning\nnow states the resolution (--mode evm = cross-chain parity helper). Er\n[…]\ntatic/stripped; needs owner decision) and the\nS8 CI/Windows-smoke scope.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "docs: errata E3/E4, E1 confirmed on-chain, SCRIPTING.md, AUDIT.md, S7…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:09:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e68b28b72d30847bba3bcb2da857843759f6668e",
          "body": "…d correction\n\nNew S7 battery: the REAL internal/script pipeline on Nile — DeployMetering\nfixture (real solc-tron artifact) planned on a pinned fork and broadcast\nunder solidified; on-chain receipts must equal the plan EXACTLY (energy and\nbandwidth ±0) and the node's ContractAddress must equal the t\n[…]\ncompile 0x03 == E1 transform on-chain, fork USDT ±0, signature/estimate.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "test(differential): script broadcast battery; E4 estimate search-boun…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:08:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fbb1a9133063086a25f105f5e1103b8529be3508",
          "body": "The two S7 literal acceptance criteria against the real binary, fully\nhermetic: (1) a deploy script planned against the in-process rpctest node +\nloopback JSON-RPC stub shows the transaction with its txid-derived Base58\naddress and costs while the node records ZERO broadcasts; a transaction the\nnode\n[…]\n\nsecond checksum table ([aderyn.checksums]) with the same platform keys.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "test(e2e): script plan/re-derivation and audit degradation flows",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:08:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "47365fc1eb0959881b05d70b238d02f38d560558",
          "body": "…e post-filter\n\nAderyn runs ONCE PER src/**/*.sol FILE (-i <file> -o <tmp>.json): a file it\ncannot parse — TVM syntax like trcToken — degrades to SKIPPED (TVM syntax)\nvia the observed v0.6.8 signal (Compilation Error printed, no report\nwritten, exit 0) without aborting the rest; other per-file failu\n[…]\nanaged-download flow was validated live (scaffold project on this host).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(audit,cli): sun audit — per-file aderyn, TVM degradation, visibl…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:08:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "badadc0c36ac27ff7782f4f8c383ae6ccdd0ad92",
          "body": "…eryn] pin\n\ncompiler.EnsureManaged extracts the solc manager's core contract — pinned\ndigest mandatory, verify-before-execute and on every call, file-locked\natomic install under SAIL_HOME/bin — and generalizes it to tar.xz release\nassets (pure-Go ulikunitz/xz + archive/tar; the pinned digest is that\n[…]\n refusal, and missing-member archives against an\nin-process HTTP server.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(compiler,config): generalized managed-binary support and the [ad…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:08:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "45b982128ba04f3a48e402c42cf48ea882aebbf6",
          "body": "sun script <path> --network <name> [--broadcast] [--policy ...] [--fee-limit]\n[--tx-timeout] [--expiration]: compiles, opens the pinned fork (openFork —\nthe composition root now shared with sun test --fork-url), plans, renders\nthe plan table (txid, kind, target/deploy address, energy, bandwidth, TRX\n[…]\nprinted; .env is committed to the scaffold\ngitignore and the repo's own.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(cli): sun script command with plan rendering and .env key sourcing",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:08:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "036c2922e5eac1de1cc75f321947c868b6d97d0e",
          "body": "…broadcast\n\nPlan executes run() on a fresh pinned-fork overlay with the tvm Script hook:\neach root-frame action is built as a REAL signed transaction\n(BuildDeploy/BuildTrigger/BuildTransfer), its txid computed, and the\ntxid-derived addresses injected back into the running script — tx N's txid\nfeeds \n[…]\nfix, transfer\nclassification, all three policies, and the lost-tx retry.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(script): sequential plan with txid-derived addresses and policy …",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:07:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e0894aa4ba7b72160dace1359a4f6369dc23c7dd",
          "body": "…ndlers\n\nBuildTransfer assembles a TransferContract under the §5.7 byte rules (the\nplan form of a value-only call to a codeless account; bandwidth-only, fee\nlimit 0). BandwidthOf exposes the bandwidth figure of a fully built signed\ntransaction (serialized size + java-tron's MAX_RESULT_SIZE_IN_TX mar\n[…]\netSolidity) confirmation paths of §5.7 —\nwith per-service call counters.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(rpc): BuildTransfer, BandwidthOf and transaction-info rpctest ha…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:07:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "afa1ffe322b0350a7210137448000a209c33482b",
          "body": "Config.Script delegates every transaction-forming action of the ROOT frame\n(CREATE, non-static CALL) to an injected closure that executes it out-of-band\nas its own root transaction and answers the injected result — the mechanism\nbehind sun script's sequential planning (§5.7). Root-frame CREATE2,\nDEL\n[…]\nads. Nil hook = zero behavior\nchange; the interpreter remains rpc-blind.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(tvm): script-mode root-frame action hook",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T21:07:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0ebc972403fefa5c233d642f6518aeeaa339a1ea",
          "body": "… invariant amendment\n\nARCHITECTURE records Erratum E2 with the Nile probe evidence: java-tron\nexposes no contract-storage read on any gRPC service, so the fork reads\nstorage via eth_getStorageAt, sanctioned solely in the fork storage\nreader — the gRPC-only rule stands everywhere else (CLAUDE.md sen\n[…]\n); TESTING.md/CONFIG.md pick up the fork flags and\nthe jsonrpc endpoint.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "docs: erratum E2 (no gRPC storage surface), FORKING.md, DEM layer and…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T19:53:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a7229a603dec0fd6322038439656e7a29e460893",
          "body": "…eries against Nile\n\nThe S6 empirical arbiter: fork-backed USDT metering (return data\nbyte-identical, E_basic == energy_used - energy_penalty +-0) and the\nstorage pin probe run keyless; the Metering scenario battery, the CREATE2\nduality resolution via both syntactic paths, the on-chain 0x03 (E1)\ncon\n[…]\nTriggerConstantContract so both sides observe the\nsame solidified state.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "test(differential): metering +-0, CREATE2 duality, 0x03 and fork batt…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T19:53:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f9790eb7265e1a877ea0920a1fb2439aec5903a1",
          "body": "--fork-url takes a network NAME declared in sail.toml (fullnode +\nsolidity + jsonrpc); the CLI composes the ForkSource and injects\nstate/block/factor closures — runner and tvm stay network-blind. Fresh\noverlay per test, DEM penalty rendered as (energy: N + P penalty) and in\n--json, sticky fork fetch\n[…]\nests loudly, and a\nlatest-only storage node prints a warning at startup.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(cli,runner): sun test --fork-url/--fork-block over the pinned fork",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T19:53:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07405c8fddec2f3955108b6ee134d818351df8c9",
          "body": "…gleflight\n\nOne solidified block pinned at creation (block context, chain-read energy\nprice, genesis chain id); all gRPC reads on the WalletSolidity service;\nstorage at the pinned height via the sanctioned JSON-RPC reader, with a\ncreation-time probe that settles the block-tag capability before any t\n[…]\n + the manual recorder) through rpctest and an\nin-process JSON-RPC stub.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(state): pinned-fork StateDB backend with lazy fetch, LRU and sin…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T19:53:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7ddf6a4256db8aa6928a6379ca79766a30e454b4",
          "body": "…ution\n\nE_total = floor(E_basic x (10000+factor)/10000), factor always chain-read\n(Config.EnergyFactor; nil = layer off, zero cost). The VM attributes each\ncontract's OWN consumed energy at frame exit and reports\nExecResult.EnergyPenalty = sum(floor(usage_c x factor_c / 10000)) plus\nEnergyTotal — no\n[…]\nre E_basic: the +-0 layer is\nuntouched, proven by the attribution tests.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(tvm): dynamic-energy-model layer with per-contract factor attrib…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T19:53:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0eb4b9e1ef549ab1f23addee64cd981f11afeef",
          "body": "…test handlers\n\nCreateSmartContract assembly under the same §5.7 byte rules as\nBuildTrigger (shared anchoring helper), with local validation of the\nnode-enforced origin energy limit. rpctest gains Solidity-side\nGetNowBlock2/GetBlockByNum2 handlers so the fork backend can be tested\nhermetically against the service it actually reads.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(rpc): BuildDeploy transaction construction and solidity-side rpc…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T19:52:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c5161d72ba3ad6d9510919e34aefdcaf2fd28a0d",
          "body": "java-tron exposes no contract-storage read over gRPC (Erratum E2): the\npinned-fork backend needs the node's JSON-RPC module. The reader is\nnarrowly scoped — one file, sole consumer state/fork.go, pinned-height\nblock tags with runtime capability detection (latest-only nodes are\nsurfaced, never silently mixed). Networks gain an optional jsonrpc\nendpoint in sail.toml.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0141uqAupSmP8q965Gc5XbJ6",
          "is_bot": false,
          "headline": "feat(rpc): sanctioned eth_getStorageAt JSON-RPC storage reader",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T19:52:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2f36dc93b248143dba0beae1c9e8e16af116dfca",
          "body": "docs/TESTING.md documents the cheatcode model (magic address, dispatch, the\nv1 set and its semantics), the discovery/execution model, the trace format\nper verbosity, the determinism guarantee, and the e2e fixture provenance +\nregeneration procedure. SPRINTS_PLAN S5 gains a refinement note recording \n[…]\nzero-vector parametrized tests, artifact completion, replay provenance).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "docs: TESTING.md reference and Sprint 5 refinement note",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T17:34:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f5e665dc87744efe14ab3baa962594a6865d8bb0",
          "body": "The hermetic e2e now runs the full init -> compile -> test flow on the\nscaffold templates, all green, executing genuine bytecode: the solc stub\nreplays committed real solc-tron 0.8.23 output for the template units. A\ndrift guard recomputes the recorded source hashes from the current templates\nand sa\n[…]\nn passing against stale bytecode. Adds the manual regen-fixtures target.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "test(e2e): init->compile->test with provenance-guarded solc replay",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T17:34:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2db5c3132d1e719a3789cca06d5fa54495324bf5",
          "body": "Behavioral tests for every v1 cheatcode, an N-run determinism check, the\n-vvv trace golden (a deliberate revert resolves to test/Revert.t.sol:9), and\nthe 100-trivial-test performance fixture (whole suite < 1 s on memState). The\nfixtures execute genuine TVM bytecode compiled once by the real,\nchecksu\n[…]\n-tron 0.8.23 via scripts/regen-fixtures.py, then run\nfully hermetically.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "test(runner): cheatcode, determinism, trace-golden and 100-test fixtures",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T17:34:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "18cdb98e19bd8c02d3614515ec0de3c7f1f4f62a",
          "body": "Wires `sun test`: compile the project, run the runner over memState, and\nrender results through the cli/output.go palette (repeat -v for events then\nthe full call tree). --json emits a stable document for CI; the command exits\nnon-zero when any test fails. The `sun init` Counter.t.sol scaffold now\nd\n[…]\nnstrates a cheatcode (sail.deal) so the template self-tests the surface.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(cli): sun test with -v/-vv/-vvv verbosity and --json",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T17:33:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6248bf0ffb7248970114d7ea61dcd33bd40496e8",
          "body": "…rce-mapped traces\n\ncheatcodes.go decodes the v1 selector set and drives the tvm cheatcode state.\nrunner.go discovers test*/testFail* from artifact ABIs, runs each on fresh\nmemState (deploy -> setUp -> test) with one worker goroutine per test contract,\nand assembles results in a pre-sorted order so \n[…]\nh per-frame energy. The\ndomain package returns structs and never prints.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(runner): cheatcode dispatch, deterministic orchestration and sou…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T17:33:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fb061c582db2d140c2831e45c47344ac179d7a0a",
          "body": "…acer\n\nThe interpreter intercepts CALLs to CheatAddress (0x41 ||\nkeccak256(\"sunsail.cheatcode\")[12:]) and dispatches them through an injected\nCheatFunc, keeping selector/ABI policy out of internal/tvm (which never\nimports internal/runner). Cheatcode state — prank (persistent msg.sender\noverride), ex\n[…]\nop PC, which\nrunner/trace.go maps to file:line. Not a per-opcode tracer.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(tvm): cheatcode magic-address interception and optional frame tr…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T17:33:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1077a57c99b8c0130381b133687a29123d7af8db",
          "body": "…ecode and source list\n\nSprint 5 preparation. The compiler now injects the embedded cheatcode\ninterface (sail.sol) as a virtual source unit into every test/ compilation,\nso test files resolve `import {sail} from \"sail.sol\";` with no physical file.\nIts embedded content hash feeds the depfile, so a bi\n[…]\nontent, and excludes the\ninjected sail.sol from its project-closure log.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(compiler): inject sail.sol into test units; persist deployed byt…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T17:33:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8f85afb38988bc8405185a4babd974f381b095a7",
          "body": "…t256 dependency row\n\ndocs/TVM.md is the new living reference for the interpreter — implemented\nEVM/TVM divergences, the precompile table with exact transforms and v1\nexplicit-error scope, the basic energy model (DEM deferred to S6), address\nderivations and the java-tron grounding pin — and the desi\n[…]\nSPRICE nuance). pipeline.go picks up\na pre-existing gofmt alignment fix.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "docs: TVM reference, ARCHITECTURE erratum E1 for precompile 0x03, uin…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T16:01:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "603e557fa3a24c04bd870e18937792f96e5c1c29",
          "body": "…h baseline\n\nHand-assembled fixtures carry their expected E_basic as exact annotated sums\n(±0, never a tolerance): SSTORE across every slot state including the TVM\nwritten-zero-is-RESET pricing with its EVM twin asserted to fail, memory\nexpansion, SHA3, EXP, LOG, loops, nested CALL with refund, REVE\n[…]\nre committed as the\nperformance baseline in testdata/bench_baseline.txt.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "test(tvm): conformance suite with annotated energy and committed benc…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T15:44:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d45d1c3dd156bb10edb2267db338ddc59310b262",
          "body": "… with exact basic metering\n\nThe dispatch loop, preallocated uint256 stack, word-aligned measured memory\nand CALL/DELEGATECALL/STATICCALL/CREATE frames mirror java-tron's VM.play and\nProgram semantics at the pinned commit: depth limit 64, min(requested,\navailable) call-energy forwarding (63/64 only \n[…]\n precompiles fail with explicit,\ndistinguishable errors, never silently.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(tvm): interpreter core, opcode set, TRON opcodes and precompiles…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T15:32:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "acc29aecb345081c37179092eb0199469c9bfe63",
          "body": "CREATE follows java-tron's TransactionUtil.generateContractAddress exactly —\n0x41 || keccak256(txid || nonce8_BE)[12:] with the transaction-wide internal\nnonce — and CREATE2 implements only the VM-native 0x41 preimage; the 0xff\nbyte never appears in this package. Vectors were computed with an indepe\n[…]\nes the\ndeterministic SHA-256(seed || counter) txids for local execution.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(tvm): CREATE and CREATE2 opcode address derivation",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T15:12:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5614970b14237456842783e0a0a7f538797ebfb",
          "body": "The tvm package now defines the StateDB interface per ARCHITECTURE §5.6 —\naccounts, code, storage with absent-vs-written-zero distinction (java-tron\nSSTORE pricing keys on it), TRC-10 balances, Stake 2.0 resource buckets,\nvoting surface, and a nested snapshot/revert journal. internal/state gains\nthe\n[…]\nure in-memory journaled backend used by every hermetic interpreter test.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(tvm): StateDB contract and journaled in-memory state backend",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T15:10:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b0c39c0718c1740cfd67995ca5bdcb989c6b7b7a",
          "body": "…uite\n\ndocs/CRYPTO.md documents the [V|R|S] -> R||S||V transform rationale, the\nrecovery invariant, the on-chain vectors policy and Base58Check derivation;\ndocs/RPC.md documents connection discipline, the transaction byte rules, the\nchain-parameter sourcing and the estimate capability-fallback strat\n[…]\nted on\nNILE_PRIVATE_KEY. Also gofmt-normalizes the S2 solc stub fixture.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "docs: crypto and rpc references; fuzz gate refinement; differential s…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:41:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7688432e1022619df7a80aea6c5969ed4956be2a",
          "body": "Foundry-style positional UX: sun estimate <contract> \"<sig>\" [args...]\n--network <name> [--from] [--value] [--fee-limit]. Calldata is ABI-encoded by\ninternal/abi; the caller defaults to the zero address. The table shows the\ntotal with its source (estimate-energy vs constant-trigger), the fallback's\n\n[…]\nivalence is pinned against an\nindependent Python Keccak implementation).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(cli): sun estimate with table and json output",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:35:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9802a8d86e5df340d0b560877195cfd3833f63eb",
          "body": "sonar address auto-detects Base58Check vs hex and prints both forms; sonar\nselector computes keccak256(sig)[:4]; sonar create2 derives the deployment\naddress under BOTH conventions of the ARCHITECTURE 5.3 duality — native\n(default, the 0x41 opcode preimage) and evm (0xff, what solc-tron emulates\nfor\n[…]\ner\nin the TVM interpreter. All subcommands are offline and honor --json.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(cli): sun sonar address, selector and create2 dual-mode",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:33:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "83e0ca1902ee00028e3e05048fe097a192be7b6d",
          "body": "EstimateCall implements the ARCHITECTURE 5.4 strategy: EstimateEnergy is the\nprimary source, and the node's own refusal (the vm.estimateEnergy-disabled\nmessage, or an absent method) — never a version check — triggers the\nTriggerConstantContract fallback, memoized per client. The fallback breaks\nener\n[…]\nscrepancy path,\ncapability memoization, and application-error surfacing.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(rpc): energy estimation with runtime capability fallback",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:31:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4adfe47687155e14f6f63786e81e3f3d351f6ccd",
          "body": "client.go opens exactly one ClientConn per (network, service Wallet |\nWalletSolidity) with keepalive, a default per-call deadline, and retries for\nTRANSPORT errors only (codes.Unavailable) — application errors surface on the\nfirst attempt. txbuilder.go pins the byte rules as tested constants:\nref_bl\n[…]\nWITHOUT EstimateEnergy\nsupport — the base of all hermetic network tests.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(rpc): connection discipline, tx byte rules, chain params, rpctest",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:31:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6a63ea35a3580404ae4276a1424e9e5b827aba30",
          "body": "Vendors api/api.proto (protocol.Wallet + protocol.WalletSolidity) and its full\ncore/ + core/contract/ import closure, byte-identical to\ntronprotocol/protocol@8432beca (pinned in proto/README.md). The real make\nproto recipe overrides the upstream go_package options via protoc M flags\n(internal/rpc/pb\n[…]\noogle.golang.org/grpc, google.golang.org/protobuf (ARCHITECTURE 4 rows).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(proto): vendor TRON protobufs and generate internal/rpc/pb",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:24:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6c1bb2fc6ba9a96fe8fddf373b9ec0206b8f2559",
          "body": "Selector = keccak256(canonical signature)[:4] (whitespace-only\ncanonicalization). The codec covers exactly the estimate/cheatcode subset:\nuintN/intN (8-bit steps), bool, address (encoded as the 20-byte payload with\nthe 0x41 prefix stripped, per TVM convention), bytes1..32, and dynamic\nbytes/string w\n[…]\ne\nwith a committed seed corpus (no panics, whole-word output invariant).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(abi): function selectors and minimal ABI codec",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:22:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f21d6aa6fd7db4b4a19f2d5cbb3138475207a675",
          "body": "Sign applies the ARCHITECTURE 5.1 reorder — decred's SignCompact [V|R|S]\n(V=27+recID) becomes TRON's R||S||V with V in {0,1} — exclusively inside this\npackage, with a defensive post-sign recovery check before any signature leaves\nit. Keccak256 uses x/crypto's legacy Keccak (stdlib crypto/sha3 is fin\n[…]\ndcrd/dcrec/secp256k1/v4, golang.org/x/crypto (both ARCHITECTURE\n4 rows).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(crypto): secp256k1 signing with mandatory R||S||V transform",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:20:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6298bf2ff4b3da04b6ecebcadf423c6b831986a2",
          "body": "…trip\n\nZero-dependency port of the reference algorithm: Bitcoin Base58 alphabet,\ndouble-SHA256 checksum, leading-zero preservation, mandatory 0x41 prefix.\nBidirectional auto-detection via Parse (T... vs hex), EVM() 20-byte payload\naccessor for ABI words and the sonar create2 --mode evm helper. Known\n[…]\n, corruption rejections,\nand FuzzRoundTrip with a committed seed corpus.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(address): TRON Base58Check address conversion with fuzzed round-…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T14:18:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "347b2556b4e9e759b787c8aeb0329f98dfa53126",
          "body": "Wires internal/compiler into the CLI: sun compile loads sail.toml from\nthe working directory, compiles every unit under src/, test/, and\nscript/ in parallel (errgroup, GOMAXPROCS-bounded), and renders a\nsummary honoring --json.\n\nThe e2e harness gains a deterministic solc stub emulating both modern\na\n[…]\nne, cache model, artifact layout,\nand the srcmap contract S5 depends on.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(cli): sun compile command with bounded parallel units",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T10:07:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3609eaae0860da7855ffddd4bb19a0379d43b116",
          "body": "…facts\n\nStandard JSON invocation with url-referenced roots, settings.remappings,\n--base-path/--include-path, and the §5.2 outputSelection (ABI, bytecode,\ndeployedBytecode.sourceMap, metadata — srcmaps feed runner/trace.go in\nS5). Old solc-tron without --include-path is detected by capability (the\nob\n[…]\nge: no regular expressions, no\nimport scanning — solc reports the graph.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(compiler): incremental solc pipeline with depfile cache and arti…",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T10:00:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b1aa3cc6ab4b2758542403146df2a3d2cf9354d",
          "body": "EnsureSolc resolves the pinned version from sail.toml, downloads the\nper-OS release asset (SAIL_SOLC_URL overridable), and verifies the\nSHA-256 digest pinned in [solc.checksums] while streaming — an\nunverifiable binary is never installed nor executed, and the file is\nre-verified on every call. Concu\n[…]\nv_0.8.23 digests, cross-checked against\nthe official release shasum.txt.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(compiler): checksum-verified solc-tron binary management",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T09:54:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0c8b8a7b5a1d714e6682b31cb702fc95b2422f17",
          "body": "The framework remains SunSail; the executable and all commands are now\nsun (sun init, sun compile, ...). The Go module path, the sail.toml\nconfig filename, the future sail.sol cheatcode asset, internal package\nnames, and the SAIL_HOME data directory are intentionally unchanged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "refactor(cli): rename binary and command surface from sail to sun",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T09:51:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a9a85514580094c13c1b50413f36bd373849c98e",
          "body": "Add `sail init [name]`: it scaffolds a complete, Foundry-like project from\ntemplates embedded in the binary (embed.FS, no satellite files). internal/scaffold\nmaterializes the tree idempotently, refusing a non-empty destination unless\n--force; the empty out/ directory is created explicitly (embed can\n[…]\nder 50 ms. docs/CONFIG.md documents the schema and layout.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(scaffold): sail init with embedded Foundry-like templates",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T09:29:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "78cddacfb671ff8997719fb37925a74c2b8f9680",
          "body": "Add internal/config parsing of sail.toml with strict decoding: unknown keys and\ntype mismatches are errors carrying a line number (go-toml/v2 DisallowUnknownFields\n+ DecodeError.Position). The schema pins the solc-tron version and per-platform\nchecksums, import remappings, named profiles, and networ\n[…]\nd input, unknown keys, wrong types, and missing endpoints.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "feat(config): strict sail.toml schema with per-network endpoints",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T09:29:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d7360f6657d7095c41670417a32eeec3c7ba4ea9",
          "body": "Commit the Tier-2 execution plan (SPRINTS_PLAN.md v1.2) that CLAUDE.md and the\nper-sprint acceptance criteria reference, and rename docs/architecture.md to\ndocs/ARCHITECTURE.md so the Tier-1 reference resolves on case-sensitive\nfilesystems (every existing reference already used the uppercase name). Also\nignore *.zip so local backups are never committed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "chore: add SPRINTS_PLAN.md and normalize docs/ARCHITECTURE.md casing",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T09:29:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "47890e8ab0fd40ebd0b403e87ab362a7ebaad0ee",
          "body": "Sprint 0: Go module (go 1.26, toolchain go1.26.5), the full internal/ package tree with doc.go placeholders, a minimal cobra 'sail --version', cli output conventions (ANSI + reserved --json), cross-platform SAIL_HOME resolution, Makefile gates (build/check/e2e/differential/proto/release), and the re\n[…]\n CI is intentionally deferred to the final sprint (YAGNI).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Cr3S4qJY2Yc9gXSc8ZpFjV",
          "is_bot": false,
          "headline": "chore: bootstrap project scaffolding and build harness",
          "author_name": "cristianrisueo",
          "author_login": "cristianrisueo",
          "committed_at": "2026-07-19T08:41:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 2,
      "commits_last_year": 59,
      "latest_release_at": "2026-07-20T08:44:28Z",
      "latest_release_tag": "v0.1.1",
      "releases_from_tags": false,
      "days_since_last_push": 8,
      "active_weeks_last_year": 1,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 0
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/sailor-labs/sunsail",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/sailor-labs/sunsail",
          "is_deprecated": false,
          "latest_version": "v0.1.1",
          "repository_url": "https://github.com/sailor-labs/sunsail",
          "versions_count": 2,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-20T08:38:56Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [
        "proto/api/api.proto",
        "proto/core/Discover.proto",
        "proto/core/Tron.proto",
        "proto/core/contract/account_contract.proto",
        "proto/core/contract/asset_issue_contract.proto",
        "proto/core/contract/balance_contract.proto",
        "proto/core/contract/common.proto",
        "proto/core/contract/exchange_contract.proto",
        "proto/core/contract/market_contract.proto",
        "proto/core/contract/proposal_contract.proto",
        "proto/core/contract/shield_contract.proto",
        "proto/core/contract/smart_contract.proto",
        "proto/core/contract/storage_contract.proto",
        "proto/core/contract/vote_asset_contract.proto",
        "proto/core/contract/witness_contract.proto"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 360432,
      "source_files_sampled": 119,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 16237
    },
    "dependencies": {
      "manifests": [
        "docs/requirements.txt",
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "github.com/decred/dcrd/dcrec/secp256k1/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.4.1"
        },
        {
          "name": "github.com/holiman/uint256",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.2"
        },
        {
          "name": "github.com/pelletier/go-toml/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.4.3"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "github.com/ulikunitz/xz",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.5.15"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.54.0"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.22.0"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.82.1"
        },
        {
          "name": "google.golang.org/protobuf",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.36.11"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 2,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "cristianrisueo",
          "commits": 59,
          "avatar_url": "https://avatars.githubusercontent.com/u/6864512?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "differential.yml",
        "docs.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 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": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "5738098cc1a2cf77da0eeea8719f253da95ff524",
        "ran_at": "2026-07-28T15:34:11Z",
        "aggregate_score": 4.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-28T05:47:42Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-20T09:30:23Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/sailor-labs/sunsail",
    "host": "github.com",
    "name": "sunsail",
    "owner": "sailor-labs"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 54,
      "inputs": {
        "security": 42,
        "vitality": 64,
        "community": 33,
        "governance": 48,
        "engineering": 77
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 64,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "at_risk",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 46,
            "inputs": {
              "commits_last_year": 59,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 1
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "1/52 weeks with commits",
                "points": 0.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "59 commits in the last year",
                "points": 16,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 59
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 2,
              "latest_release_tag": "v0.1.1",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "2 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 33,
        "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": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 48,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2/2 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 2
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "followers": 1,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "sailor-labs",
              "public_repos": 1,
              "account_age_days": 8
            },
            "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 sailor-labs",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "sailor-labs"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~0 yr old",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/sailor-labs/sunsail"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "2 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 77,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "developer-tools",
                "foundry",
                "go",
                "golang",
                "smart-contracts",
                "solidity",
                "tron",
                "tvm"
              ],
              "has_wiki": false,
              "homepage": "https://sailor-labs.github.io/sunsail/",
              "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://sailor-labs.github.io/sunsail/",
                "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": "8 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "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": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 42,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.2
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 16237
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": "59 of 59 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 59,
                      "sampled": 59
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.983,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "58 of the last 59 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 58,
                      "sampled": 59
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 360432,
              "source_files_sampled": 119,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/119 source files over 60KB",
                "points": 53.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 119,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": false,
              "api_schema_files": [
                "proto/api/api.proto",
                "proto/core/Discover.proto",
                "proto/core/Tron.proto",
                "proto/core/contract/account_contract.proto",
                "proto/core/contract/asset_issue_contract.proto",
                "proto/core/contract/balance_contract.proto",
                "proto/core/contract/common.proto",
                "proto/core/contract/exchange_contract.proto",
                "proto/core/contract/market_contract.proto",
                "proto/core/contract/proposal_contract.proto",
                "proto/core/contract/shield_contract.proto",
                "proto/core/contract/smart_contract.proto",
                "proto/core/contract/storage_contract.proto",
                "proto/core/contract/vote_asset_contract.proto",
                "proto/core/contract/witness_contract.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "proto/api/api.proto, proto/core/Discover.proto, proto/core/Tron.proto, proto/core/contract/account_contract.proto, proto/core/contract/asset_issue_contract.proto, proto/core/contract/balance_contract.proto, proto/core/contract/common.proto, proto/core/contract/exchange_contract.proto, proto/core/contract/market_contract.proto, proto/core/contract/proposal_contract.proto, proto/core/contract/shield_contract.proto, proto/core/contract/smart_contract.proto, proto/core/contract/storage_contract.proto, proto/core/contract/vote_asset_contract.proto, proto/core/contract/witness_contract.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "proto/api/api.proto, proto/core/Discover.proto, proto/core/Tron.proto, proto/core/contract/account_contract.proto, proto/core/contract/asset_issue_contract.proto, proto/core/contract/balance_contract.proto, proto/core/contract/common.proto, proto/core/contract/exchange_contract.proto, proto/core/contract/market_contract.proto, proto/core/contract/proposal_contract.proto, proto/core/contract/shield_contract.proto, proto/core/contract/smart_contract.proto, proto/core/contract/storage_contract.proto, proto/core/contract/vote_asset_contract.proto, proto/core/contract/witness_contract.proto"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T15:34:17.113191Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sailor-labs/sunsail.svg",
  "full_name": "sailor-labs/sunsail",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasGo.