Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-24 14:31 UTC

HashShin / coded

A full code editor right in your browser.

JavaScript · Go · CSSMIT★ 0 estrellas⑂ 0 forksdesde jul 2026Ver en GitHub ↗

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

42
global / 100
En riesgo

Índice de salud del software

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

42
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

Hash ShinrinyokuCuenta personal
4 seguidores6 repositorios públicosdesde dic 2023

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/HashShin/codedv0.2.1-12hace 0 días

Métricas por categoría

Vitalidad

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

68Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
1.4/36Cadencia de commits — 2/52 semanas con commits
16.9/18Volumen de commits — 76 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_year76
human_commit_share1
days_since_last_push0
active_weeks_last_year2
Cómo se puntúa
27/27Publica versiones — 12 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~0,3 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count12
latest_release_tagv0.2.1
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases0,3

Comunidad y Adopción

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

24Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

32En 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
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
5/25Alcance del propietario — 4 seguidores de HashShin
11.4/25Trayectoria — 6 repos públicos, cuenta de ~2 años
Datos de entrada utilizados
followers4
owner_typeUser
is_verified
owner_loginHashShin
public_repos6
account_age_days965
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 12 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/HashShin/coded
ecosystemsgo
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

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

Documentación

40En riesgo
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
0/10Wiki
Datos de entrada utilizados
topics
has_wikino
homepage
has_readme
has_docs_dirno
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?

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

39En riesgo · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 78 de 81 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,963
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — go.mod (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
0/11Verificación estática de tipos
0/10Entorno reproducible
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 81
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
lockfiles
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — JavaScript sin configuración de verificación de tipos
49.8/55Tamaños de archivo manejables — 2/21 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJavaScript
largest_source_bytes121.403
source_files_sampled21
oversized_source_files2

Datos clave

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

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 3.2 / 10
3.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-24 14:31 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1028,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 77117,
        "CSS": 41467,
        "HTML": 18259,
        "Shell": 6535,
        "JavaScript": 256989,
        "PowerShell": 3921
      },
      "pushed_at": "2026-07-24T03:39:15Z",
      "created_at": "2026-07-18T13:09:21Z",
      "owner_type": "User",
      "updated_at": "2026-07-24T03:39:19Z",
      "description": "A full code editor right in your browser.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "Go",
        "CSS"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Hash Shinrinyoku",
      "type": "User",
      "login": "HashShin",
      "company": null,
      "location": null,
      "followers": 4,
      "avatar_url": "https://avatars.githubusercontent.com/u/152677907?v=4",
      "created_at": "2023-12-02T05:42:38Z",
      "is_verified": null,
      "public_repos": 6,
      "account_age_days": 965
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-07-24T03:40:44Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-07-23T00:35:37Z"
        },
        {
          "tag": "v0.1.9",
          "kind": "patch",
          "published_at": "2026-07-22T15:40:51Z"
        },
        {
          "tag": "v0.1.8",
          "kind": "patch",
          "published_at": "2026-07-22T02:21:02Z"
        },
        {
          "tag": "v0.1.7",
          "kind": "patch",
          "published_at": "2026-07-21T23:21:42Z"
        },
        {
          "tag": "v0.1.6",
          "kind": "patch",
          "published_at": "2026-07-21T14:08:12Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-07-21T13:10:23Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-07-21T12:00:06Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-07-21T09:27:21Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-07-21T08:42:04Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-07-18T14:52:44Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-18T13:59:57Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c25c1584d2fcd6dfd186e83758d1453a039bfe75",
          "body": "syscall.Exec fails after pkg install because the kernel marks\n/proc/self/exe as \"(deleted)\" when the binary is replaced in-place.\n\nSwitch to spawning a detached child process resolved via PATH so the\nnew binary is always found cleanly. The parent exits after Start(),\nreleasing the port; the child re\n[…]\nresolveExe() now prefers PATH lookup (new binary is there immediately\nafter pkg install) with os.Executable()+strip-(deleted) as fallback,\nboth gated by isRunnable() to reject partially-written files.",
          "is_bot": false,
          "headline": "fix: spawn fresh coded process on restart instead of re-exec",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-24T03:39:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3af112027e43c8f2f60ff1dda8628885b2b593a",
          "body": "…cket Enter-expansion\n\n- Search: close find panel when switching to a different file tab\n- Tab switch: preserve per-file scroll position and caret; pin scroll to\n  beat async browser scroll-to-top from setValue; new/closed tabs start\n  at top and clean up saved state on close\n- Touch keyboard: stop \n[…]\nith }\n  on the line below; { no longer auto-closes on typing\n- Touch auto-close: (, [, \", ' now auto-close on soft keyboards via\n  _onInput path (physical keyboards already handled this in _onKeydown)",
          "is_bot": false,
          "headline": "feat: restore scroll/caret on tab switch, close search on switch, bra…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-24T03:11:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e9bc4edba553d92bd9e3023c17a9c90b9315b19",
          "body": "Generalize PHP include-autocomplete into a table-driven engine driven by\na per-language config (import regex, path resolver, definition regex).\nAsync fire-and-forget cache keeps file opening and typing smooth.",
          "is_bot": false,
          "headline": "feat: import-based function autocomplete for JS/TS, Python, C/C++, Ruby",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-24T01:30:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "847458cf36ca418ff673a1910bc6854e406f8ee4",
          "body": null,
          "is_bot": false,
          "headline": "feat: PHP autocomplete for functions from include/require'd files",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-24T01:23:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97b1fa322678c9ed5713807129ff1583632031c4",
          "body": null,
          "is_bot": false,
          "headline": "fix: hide .coded metadata dir from file tree even with hidden files on",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-24T01:14:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "375f33574d8f81ab50e31653c79935386d986b65",
          "body": "Extract the FILE_ICON_PATHS lookup map (34 icons, ~39KB) from\nfileicons.js into a fileicons.json data file loaded at runtime, so the\nicon data is no longer counted as hand-written JavaScript. fileicons.js\nbecomes a thin loader exposing window.FILE_ICON_PATHS_READY; app.js gates\nthe first render on i\n[…]\nissing.\n\nAdd .gitattributes marking static/vendor/** as linguist-vendored and\nfileicons.json as linguist-generated so GitHub's language bar reflects\nactual project code. Runtime behavior is unchanged.",
          "is_bot": false,
          "headline": "refactor: move file-icon data out of JS into fileicons.json",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-23T00:30:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1dcda8a4c104211b9077153db1d958552ee79e70",
          "body": "After a new version is committed to TUR's build.sh, the .deb package hasn't\nbeen built yet. Query the GitHub commits API for the build.sh last-changed\ntime and suppress the update suggestion during a 15-minute grace period.\nFails open (shows update) if the commits API is unreachable or returns no data.",
          "is_bot": false,
          "headline": "feat: suppress TUR pkg update within 15 min of build.sh change",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-22T23:47:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f4a90bdc9857c0b8511c24c23e507070749d0466",
          "body": "os.Executable() returns a '(deleted)' suffixed path after pkg replaces the\nbinary, causing syscall.Exec to fail with ENOENT. resolveExe() now strips the\nsuffix and falls back to exec.LookPath so restart succeeds after a TUR update.",
          "is_bot": false,
          "headline": "fix: resolve correct exe path after pkg upgrade to fix restart failure",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-22T23:42:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06b57a952718a523a9d59f5688dd6993e21eb507",
          "body": "…y-installed prompt\n\n- Braille spinner (ASCII fallback) with real Content-Length-based progress bar during download\n- TTY-guarded ANSI colors; plain output in piped/CI runs\n- Detects if coded is already at latest version and prompts to reinstall (reads from /dev/tty)\n- Colorized status messages for all install steps\n- Preserves CODED_CURRENT_VERSION fast-path for `coded update` invocation\n- install.ps1: colored output, already-installed detection + Read-Host prompt, IWR progress bar",
          "is_bot": false,
          "headline": "feat: polished install scripts with spinner, progress bar, and alread…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-22T15:54:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f2a114138378d653b0a1ed5c7c804cd55d995ed",
          "body": "…l notes\n\n- Focus search modal input unconditionally so mobile keyboard opens on tap\n- Disable save button when file has no unsaved changes (enabled only when dirty + online)\n- Expand goreleaser release footer with curl/irm one-liner install scripts and improved TUR wording",
          "is_bot": false,
          "headline": "feat: search opens keyboard, save disabled when clean, release instal…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-22T15:37:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56d8c786b8011cd7a1305b68d70eea4b4e50d1f5",
          "body": null,
          "is_bot": false,
          "headline": "fix: make Explorer header label non-selectable",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-22T02:17:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ad27c5f4e0e7ac42af4bfc5bb88dbeec9b8be0a",
          "body": null,
          "is_bot": false,
          "headline": "feat: expand parent folder when creating a new file or folder",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-22T02:11:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6621b012379d034a4dd54d89a9405f6a116ca8e2",
          "body": null,
          "is_bot": false,
          "headline": "feat: auto-open new file in editor after creation",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-22T01:47:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b73210d09bd195c18f8e1ba5d6cb407269d66c0",
          "body": "TUR build.sh now passes -ldflags \"-X main.version=${TERMUX_PKG_VERSION}\"\nso the pkg binary has the correct version embedded. The suppression that\nprevented 'coded version' / 'coded -v' from printing on pkg installs\nwas based on an old assumption and is no longer needed.",
          "is_bot": false,
          "headline": "fix: always print version on CLI, remove stale pkg suppression",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T23:41:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "342346c76f62edce364908fc20e51180a6b5199d",
          "body": "Replaces apt-cache policy (which requires pkg update to refresh its\nlocal cache) with a direct HTTP fetch of the TUR build.sh file.\nParses TERMUX_PKG_VERSION for an accurate, up-to-date answer with\na single lightweight request — no local cache staleness.",
          "is_bot": false,
          "headline": "feat: check TUR build.sh for pkg update version instead of apt-cache",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T23:33:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c4615d9413ff942e64db54219e8ae1cac246f65",
          "body": "Reset the update cache LastChecked timestamp at startup so every run\nhits the GitHub API fresh instead of serving a 24h cached result.",
          "is_bot": false,
          "headline": "feat: force fresh update check on every run",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T23:19:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a257399b8388fda2e8efd45f31197c3c5a1a301b",
          "body": "Upstream Go (goreleaser CI, GOOS=android CGO_ENABLED=0) cannot find\nnameservers on Android because /system/etc/resolv.conf does not exist\nand it has no knowledge of Termux's $PREFIX/etc/resolv.conf. The\nresolver falls back to [::1]:53 which always fails, causing the update\ncheck to return 'Check fai\n[…]\nIX/etc/resolv.conf first,\nthen /etc/resolv.conf, then falls back to 1.1.1.1:53 and 8.8.8.8:53.\nThis bypasses resolv.conf discovery entirely and works regardless of\nwhich Go toolchain built the binary.",
          "is_bot": false,
          "headline": "fix: custom DNS resolver for Android/Termux release binary",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T14:24:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b68aa58519c037df7443da18e9d0eafe5110cec",
          "body": "GOOS=android binaries are CGO_ENABLED=0 so netdns=cgo is unavailable.\nWithout this, the resolver falls back to [::1]:53 which fails on Termux\nsince /etc/resolv.conf does not exist. Setting netdns=go in an init()\nwith the android build tag fixes DNS for the goreleaser android binary\nwithout affecting linux/darwin/windows builds.",
          "is_bot": false,
          "headline": "fix: force pure-Go DNS resolver on Android/Termux builds",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T14:15:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfd8bb0ed7a135d4f429c364b718932095555bba",
          "body": "- Add Error field to UpdateInfo: network failures now return a non-empty\n  error string instead of silently looking like \"up to date\"\n- JS refresh handler shows \"Check failed. Are you online?\" on error vs\n  the previous misleading \"You're up to date\"\n- Bump GitHub fetch timeout from 3s to 10s for sl\n[…]\nnections\n- Remove dead GODEBUG/netdns=cgo block in main(): it was set inside main()\n  (too late for the resolver) and the release binary is CGO_ENABLED=0\n  so the cgo resolver isn't compiled in anyway",
          "is_bot": false,
          "headline": "fix: surface fetch errors instead of false \"up to date\"",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T14:03:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d93d524ecf5e1b0e760501e0c02f3fe25f51ebc4",
          "body": null,
          "is_bot": false,
          "headline": "fix: open About section by default in Settings",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T13:42:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e23038254463db92bda31e0e449a82184bace8b",
          "body": "Remove the \"Check for updates\" text button and the update-available chip.\nAdd a small SVG refresh icon inline next to the version number in Settings\n→ About. Clicking it spins the icon, hits /api/update/refresh + /api/update\n(with ignore_skip=1 so skipped versions surface again), then opens the\nupdate banner directly if an update is available.",
          "is_bot": false,
          "headline": "feat: replace check-update button with SVG refresh icon beside version",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T13:41:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fa8bc12cace21107bf6e2b26b34db38bd2db5c8",
          "body": null,
          "is_bot": false,
          "headline": "fix: update chip is icon-only (⬆) beside version badge",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T13:20:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7f887b6920da82bb91bafae0f1172e4358ee96a",
          "body": null,
          "is_bot": false,
          "headline": "feat: update chip beside version badge in settings",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T13:17:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abf521f6353189b57b2a1b60ce76f29d6f4c53e5",
          "body": null,
          "is_bot": false,
          "headline": "feat: check for updates button in settings with cache refresh",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T13:16:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a41a309872cd6d482b13159eb4cc5aec9c5107be",
          "body": null,
          "is_bot": false,
          "headline": "fix: force cgo DNS resolver on Termux to fix GitHub download failures",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T12:38:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ac0dffe163bb12dc4e6df5379842942bf2f15d5",
          "body": null,
          "is_bot": false,
          "headline": "fix: use pkg install -y coded instead of pkg upgrade for web UI update",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T12:18:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a405c13b381043429e91fea71257931f10be9cc4",
          "body": null,
          "is_bot": false,
          "headline": "feat: ?pkg=1 page param enables pkg update UI in browser for testing",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T12:12:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e39ed124fca83975b2b9fcf7328c67b8f2485c6",
          "body": null,
          "is_bot": false,
          "headline": "feat: add ?pkg=1 dev override to test pkg update path via curl",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T12:11:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22d6ef6b73e4761fe703b0a30c232d52f25d2a3d",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove terminal update notice (web UI banner handles it)",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T12:07:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9136171bae691b3bbd8c61828adf53dde9efede",
          "body": "For pkg-managed installs, \"Update now\" now runs `pkg upgrade -y coded`\nserver-side and streams each output line to a scrolling log box in the\nbanner via SSE. Same restart flow applies after upgrade completes.",
          "is_bot": false,
          "headline": "feat: pkg install update via web UI with live log stream",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T12:05:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebadf143541b9ad6eabb5a7ddb71d64a6c18aa7e",
          "body": null,
          "is_bot": false,
          "headline": "feat: animated restart countdown in update banner",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T11:52:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2a0b1867e6ca9aad36f9be2abb8ffc3434e1044",
          "body": "Inject CODED_PORT env var before syscall.Exec so the re-exec'd\nbinary binds the original port instead of picking a random one.\nmain.go reads CODED_PORT on startup to honour it.",
          "is_bot": false,
          "headline": "fix: restart on same port after self-update",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T11:51:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08e1648357a0e0b633cba8810332c2469dba1996",
          "body": "- Fix .update-progress[hidden] overridden by display:flex class rule\n- Clear hardcoded \"0%\" from progress text initial HTML\n- Add flex-wrap + mobile media query so banner stacks on narrow screens\n  with full-width tappable buttons\n- Post-download: relabel Later button, add Reload button during restart\n- waitForServer: after ~8s fallback message guides mobile users to\n  re-run coded manually if tab was backgrounded during restart",
          "is_bot": false,
          "headline": "fix: update banner mobile layout, stray 0%, restart UX",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T11:42:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "959676651ecc6e0b1646f5a8e2c1b50624b2272a",
          "body": "Non-pkg installs can now click \"Update now\" in the web UI to\ndownload the latest release through the server with a live\nprogress bar (bytes/percentage). On completion, \"Restart now\"\nre-execs the new binary on the same port and the page reconnects\nautomatically. pkg installs keep the existing hint message.",
          "is_bot": false,
          "headline": "feat: in-app self-update with live SSE progress bar",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T11:31:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "691ff2a5af5de075f9e074834629c64e4e6b6a60",
          "body": "Group settings into Appearance (expanded by default) and About\n(collapsed) using native <details>/<summary> with animated chevron.\nVersion text simplified to plain color, no badge box.",
          "is_bot": false,
          "headline": "feat: collapsible sections in settings modal",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T11:17:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65f6b51eeaf8f91defa520e57e21c1a90d6d9098",
          "body": null,
          "is_bot": false,
          "headline": "feat: show version and source link in settings modal",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T10:40:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a89572868dd031ee1162b392d57ceaae35fc430b",
          "body": null,
          "is_bot": false,
          "headline": "feat: coded uninstall runs pkg remove coded directly on pkg installs",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T10:37:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b140313d05b8f02a8206fdf396b8ce5fe8e376b4",
          "body": null,
          "is_bot": false,
          "headline": "fix: use pkg remove coded instead of pkg uninstall coded",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T10:35:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd03d26db365d0a2e0152b201e0c0d41527b8fe2",
          "body": null,
          "is_bot": false,
          "headline": "feat: add coded uninstall / coded remove subcommand",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T10:27:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89ae460f9c490363950781faff05f14049ee2968",
          "body": "…web banner for pkg users",
          "is_bot": false,
          "headline": "feat: use apt-cache policy for update check on pkg installs; restore …",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T09:24:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c524e983436656668c83c807815884f479b3078",
          "body": "…nal notice",
          "is_bot": false,
          "headline": "fix: suppress version/web-banner for pkg-managed installs, keep termi…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T08:39:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "703269683aa7c6d4111c281a96ad1c07ba2bc8e7",
          "body": "- server/update.go: CheckForUpdate queries GitHub latest release,\n  cached to ~/.config/coded/update.json for 24h. Skips dev builds,\n  falls back to cache on network error, honors SkipVersion.\n- server/update_handlers.go: GET /api/update, POST /api/update/skip\n- server/server.go: plumb version+viaPk\n[…]\nvailable;\n  installedViaPkg() defers to `pkg upgrade coded` on TUR installs\n- Web UI: blue #update-banner with Update now/Skip/Remind later\n- server/update_test.go: 7 hermetic tests with httptest mock",
          "is_bot": false,
          "headline": "feat: proactive update notifications (terminal + web UI)",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T08:34:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "80891115a395bedb4b835760278b95604b9784d5",
          "body": "- coded -version / -v / version: print build version (injected via ldflags)\n- coded update / upgrade: re-run install script, skip if already latest\n- goreleaser: inject version into both build blocks\n- install scripts: CODED_CURRENT_VERSION short-circuit when up to date\n- app.js: add ps1/psm1 PowerShell file icons",
          "is_bot": false,
          "headline": "feat: add -version flag, self-update command, and .ps1 icon",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T08:08:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c19dcc893122ae99e5a15d67aba4cf09ade13ef",
          "body": null,
          "is_bot": false,
          "headline": "feat: add android/arm64 build for Termux and select it in install script",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T07:53:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "057fc7099b7b36a1f1a1d18048715e91d789ebc0",
          "body": "…ernel",
          "is_bot": false,
          "headline": "fix: detect Termux via env var to avoid faccessat2 crash on Android k…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T07:47:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e649915101afab6c088466223b47a04a8912d065",
          "body": null,
          "is_bot": false,
          "headline": "fix: use versioned filename in install scripts",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T07:40:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d071d8da7a221da2a87ddbe8162c9ae9d31c8569",
          "body": "- install.sh: detects OS/arch, downloads bare binary from latest release\n- install.ps1: PowerShell equivalent for Windows, adds to user PATH\n- goreleaser: switch to bare binary output (no tar.gz/zip archives)\n- README: add curl and irm install instructions",
          "is_bot": false,
          "headline": "feat: add one-line install scripts for Linux/macOS and Windows",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T07:32:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e92af51b283ec3776c4d3a0c4977f66fbd1685b5",
          "body": null,
          "is_bot": false,
          "headline": "ci: rename .goreleaser.yaml to .goreleaser.yml",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T07:21:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8302bbcc8d9f22cbd885a533e3fe96ab603154e9",
          "body": null,
          "is_bot": false,
          "headline": "ci: add goreleaser for automated release builds",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T07:19:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ae715b99ce70f7fb94d75303d5f1d0a2c766a26",
          "body": "…tection\n\n- Add swipe-from-left-edge gesture to open explorer sidebar\n- Close sidebar on file open regardless of screen size\n- Show deleted-file banner when active file is removed externally\n- Add license, lock, sql, xml, svg, ini/cfg/conf, makefile file icons\n- Fix rename modal auto-focus on touch \n[…]\n-directory triggering rename prompt\n- Add rawSvg badge type for multi-color/custom-viewBox SVG icons\n- Add user-select:none to sidebar close button\n- Update README with Termux pkg install instructions",
          "is_bot": false,
          "headline": "feat: improve UI with file icons, sidebar swipe, and file deletion de…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-21T07:05:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c1b8c64cbc12a21033edc8868bf9b467c76c306",
          "body": null,
          "is_bot": false,
          "headline": "fix: support remote go installation",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T14:52:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eede932d8cc6e11cfbbf5e8a04f38b6725eb3a66",
          "body": null,
          "is_bot": false,
          "headline": "docs: add MIT license",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:58:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a616d262383f51f7e530f6b41bcec725de59455c",
          "body": null,
          "is_bot": false,
          "headline": "docs: add repository clone step",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:56:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04491997a0abae5b745be0959644220c4b89da4a",
          "body": null,
          "is_bot": false,
          "headline": "docs: explain running coded from a project",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:53:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a7df8ed878468bb4b1be64e00a0060fce1a3b7b",
          "body": null,
          "is_bot": false,
          "headline": "docs: show installed coded command",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:52:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d5e7fb66e7889dec05342e5059037801083288f",
          "body": null,
          "is_bot": false,
          "headline": "docs: use go install for installation",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:50:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d6e35580c62df38a3f57453ec2b494ca9bde95b",
          "body": null,
          "is_bot": false,
          "headline": "fix: close explorer when selecting open file",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:48:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91d0f20b456a2e83d9940db9fdab1e71fad2f86e",
          "body": null,
          "is_bot": false,
          "headline": "docs: optimize app screenshot as PNG",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:36:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1f456c8afff1eef701954e3e635e75ceb9afa46",
          "body": null,
          "is_bot": false,
          "headline": "docs: reduce screenshot display size",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:31:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b948d5fa81e521a28df2d4480aad10adad1b28cc",
          "body": null,
          "is_bot": false,
          "headline": "docs: add mobile app screenshot",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:29:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b822a179a11b8be42f204d83c0be6c288ea4c3a",
          "body": null,
          "is_bot": false,
          "headline": "chore: move logo into static assets",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:12:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c49ac8c84cc6bbaf5759af9ff9058d50bacdf892",
          "body": null,
          "is_bot": false,
          "headline": "feat: build mobile-first browser code editor",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-18T13:08:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "708657f1e5184eff924f6ca4ed66a87a2ce1000b",
          "body": "…or more file types",
          "is_bot": false,
          "headline": "fix: line number scroll sync, undo dirty state, syntax highlighting f…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-15T01:30:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3dde9704376bcc3b2314a72510ccc3a3d6cc93b4",
          "body": "…r font stack",
          "is_bot": false,
          "headline": "feat: mobile-first UX redesign — drawer sidebar, touch targets, bette…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-15T01:20:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5da68f4296e351421ed95012643f0d57acd260b",
          "body": null,
          "is_bot": false,
          "headline": "fix: skip dotfiles and dotdirs in /api/files handler",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T23:53:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "462a42ff489004aebe4485c3c39ce4165a0471e6",
          "body": "Part 1 — CSS: rewrote app.css with consistent #1e1e1e/#252526/#2a2a2a\npalette, global custom scrollbars, unified border color #3c3c3c, themed\ninputs/buttons in find/folder-search panels, polished welcome screen,\napp-name span in toolbar. Updated index.html title to \"Coded\", added\napp-name label, two\n[…]\n server/server_test.go (package server) with 6\ntests — TestResolveWithinRoot, TestHandleTree, TestHandleFileGet,\nTestHandleFilePut, TestHandleFileGetTraversal, TestHandleSearch.\nAll pass. Build clean.",
          "is_bot": false,
          "headline": "feat: dark theme polish, path-safety fix, and Go tests (Task 10)",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T23:44:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b87f1356ac325755f5f62518195543b3180a959",
          "body": "- Replace handleFilesStub with handleFiles in server/files.go:\n  recursive walk, skips .git/node_modules/.webeditor, binary and\n  >10MB files, returns sorted relative paths, max 5000 files\n- Wire /api/files to handleFiles(root) in server/server.go\n- New static/js/quickopen.js: fuzzy-scored file pick\n[…]\n positions caret by offset\n- Add Ctrl+P and Ctrl+G key bindings in app.js\n- Add quickopen.js script tag to index.html (after search.js)\n- Add #quickopen-overlay, #quickopen-modal, #gotoline-prompt CSS",
          "is_bot": false,
          "headline": "feat: Quick Open (Ctrl+P) and Go-to-Line (Ctrl+G) — Task 9",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T23:34:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db9dc5b3884e58014c685e9456e760bafc859c56",
          "body": "- static/js/search.js: self-contained Search module with in-file\n  find/replace (Ctrl+F / Ctrl+H / Escape) and folder search\n  (Ctrl+Shift+F); highlights matches via <mark> DOM injection,\n  re-applied through editor.onAfterRender hook\n- static/js/editor.js: call onAfterRender callback after _render(\n[…]\nnd panel, marks, folder results\n- server/files.go: add handleSearch — recursive walk with binary/size\n  skip, plain and regex matching, max 200 results\n- server/server.go: register /api/search handler",
          "is_bot": false,
          "headline": "Task 8: add find/replace panel and folder search",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T23:28:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cec911474c02df8098088fa392da3f883b84833e",
          "body": null,
          "is_bot": false,
          "headline": "feat(editor): add code folding (Task 7)",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T23:22:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c81bf2d20e1492fad3b6e8aaf4c4a7e50ea0cae7",
          "body": "- Auto-indent on Enter: preserves leading whitespace, adds extra indent after {([:\n- Auto-close pairs: (, [, {, \", ' with smart skip (no double-close, no triple-quote)\n- Bracket match highlight: tok-bracket-match CSS class on both sides via selectionchange\n- Line number gutter: #line-numbers div synced to editor scroll\n- Word-wrap toggle: Alt+Z shortcut + toolbar \"Wrap\" button, default on",
          "is_bot": false,
          "headline": "feat(editor): add editing niceties (Task 6)",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T13:22:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "298bf71f32976b9568660785b28ac5912719b999",
          "body": "- server/session.go: GET/PUT /api/session handlers store session.json\n  under <root>/.webeditor/ using atomic temp+rename writes; GET returns\n  {} when no session file exists yet\n- server/server.go: register /api/session route\n- static/js/editor.js: expose public getCaretOffset() and setCaretOffset(\n[…]\non/scheduleSaveSession (2s debounce) called\n  on every edit, tab switch, and tab close; loadSession restores open tabs\n  with stored content (no re-fetch), dirty state, and caret position on\n  startup",
          "is_bot": false,
          "headline": "feat: add autosave and session recovery (Task 5)",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T13:15:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e5966fd9d471c9ea3a86e14d6aa7d06f7ee3efd4",
          "body": "…te indicator\n\n- Backend: split handleFile into GET/PUT dispatcher; PUT handler does atomic\n  write via os.CreateTemp + os.Rename, returning 200 {\"ok\":true} on success\n  and appropriate 400/403/404 errors\n- main.go: resolve --dir flag to absolute path so resolveWithinRoot works\n  correctly when a re\n[…]\ne() PUT-saves and clears dirty on success; Ctrl+S/Cmd+S wired\n  in init(); createTab wraps filename in <span class=\"tab-label\">\n- app.css: .tab.dirty .tab-label::after shows orange ● when tab is dirty",
          "is_bot": false,
          "headline": "Task 4: add file saving with atomic write, Ctrl+S shortcut, dirty-sta…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T13:07:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "135d2263e18543d35784c48a6098db07b4f0e375",
          "body": "- I5: Remove dead escHtml function from tokenize.js (HTML escaping is\n  handled by esc() in editor.js)\n- I1: Fix nodeOffsetToChar when targetNode === root (select-all-delete\n  edge case): use getPlainText line-split to compute correct offset\n  rather than falling through to the generic element walke\n[…]\nn\n  listeners and detaches the inner element from the DOM\n- m2: Replace hardcoded id=\"editor-inner\" with class=\"editor-inner\" in\n  editor.js; update #editor-inner selectors to .editor-inner in app.css",
          "is_bot": false,
          "headline": "fix: resolve four quality issues in editor (Task 3)",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T13:01:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f7f94530335c2ba393eb67675eded887c6f4ac4a",
          "body": "…(Task 3)\n\n- Add tokenize.js: regex-based tokenizer for Go, JS/TS, Python, JSON,\n  HTML, CSS, Markdown, Shell, and plain text; emits typed token arrays\n- Add editor.js: Editor class with contenteditable div, caret save/restore\n  via TreeWalker (handles text nodes and element nodes for empty lines),\n\n[…]\n.setValue/getValue\n- Update index.html: replace <pre> with editor-container div, load\n  tokenize.js and editor.js before app.js\n- Update app.css: add tok-* colour rules and #editor-inner layout styles",
          "is_bot": false,
          "headline": "feat: implement contenteditable editor with live syntax highlighting …",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T12:54:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ccfdfe0ab8e20413b12b6c0c08a61e0bce0a5b55",
          "body": "…header\n\n- Add writeJSONError helper so all API error responses carry\n  Content-Type: application/json (fixes frontend res.json() breakage)\n- Replace every http.Error JSON-body call with writeJSONError in\n  handleTree, handleFile, and handleFilesStub\n- Capture f.Read error in binary sniff; return HTTP 500 if not io.EOF\n- Remove dead w.Header().Set before http.Error in binary branch\n- Log json.NewEncoder encode error instead of silently discarding it",
          "is_bot": false,
          "headline": "Fix quality issues in files.go: JSON errors, silent read error, dead …",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T12:46:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67a7443c41379a8127795e82c87c7c8d1ae2c375",
          "body": "- server/files.go: GET /api/tree (lazy one-level dir listing, dirs-first sort,\n  dot-file skip), GET /api/file (10 MB limit, binary detection, plain-text\n  response), GET /api/files stub (501), shared resolveWithinRoot path-safety\n  helper (rejects traversal attempts with HTTP 400)\n- server/server.g\n[…]\nbox, scrollable\n  sidebar and content area)\n- static/js/app.js: lazy tree expansion, tab management with open/switch/close,\n  file content display in <pre>, open-file cache (Map<path,{content,dirty}>)",
          "is_bot": false,
          "headline": "feat: add file tree API, sidebar UI, and read-only file viewer (Task 2)",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T12:40:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cfc8f57c0d063c14937831be570cf4fc3090638b",
          "body": "…d version\n\n- Pass open net.Listener into server.Start instead of a port number,\n  eliminating the TOCTOU race between findFreePort and bind\n- Change server.Start signature to return error instead of panicking\n- Print \"Listening on...\" only after the listener is successfully bound\n- Replace staticFS.Open in SPA fallback with fs.Stat to fix file handle leak\n- Fix go.mod directive from non-existent go 1.26 to go 1.23\n- Add comment noting root param will be used by future API handlers",
          "is_bot": false,
          "headline": "fix: resolve TOCTOU race, file handle leak, panic-on-error, and go.mo…",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T12:33:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45a25a62c97b2542d234501b10e26aaae02a5300",
          "body": "Implements Task 1: go.mod (module webeditor, Go 1.26), main.go with\n-port/-dir flags and free-port discovery, server/server.go with SPA\nfallback and 501 /api/ placeholder, and static/index.html embedded via\nembed.FS at the module root.",
          "is_bot": false,
          "headline": "feat: scaffold Go HTTP server with embedded static assets",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T12:28:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6ba73108a8ed8c568e71ae4ba22d6f07dc1e1ab",
          "body": null,
          "is_bot": false,
          "headline": "Fix .gitignore to cover .worktrees without trailing slash",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T12:25:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b2b1c90c5c70cf010980d629c8837c7389ae187",
          "body": null,
          "is_bot": false,
          "headline": "Add .gitignore",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T12:25:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f53c9ca3f0023897cbd9ab4d953c6edd0152766",
          "body": null,
          "is_bot": false,
          "headline": "Initial empty commit",
          "author_name": "HashShin",
          "author_login": "HashShin",
          "committed_at": "2026-07-14T12:24:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 12,
      "commits_last_year": 76,
      "latest_release_at": "2026-07-24T03:40:44Z",
      "latest_release_tag": "v0.2.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 2,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 0.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/HashShin/coded",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/HashShin/coded",
          "is_deprecated": false,
          "latest_version": "v0.2.1",
          "repository_url": "https://github.com/HashShin/coded",
          "versions_count": 12,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T03:39:06Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 121403,
      "source_files_sampled": 21,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "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"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "HashShin",
          "commits": 81,
          "avatar_url": "https://avatars.githubusercontent.com/u/152677907?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "c25c1584d2fcd6dfd186e83758d1453a039bfe75",
        "ran_at": "2026-07-24T14:31:37Z",
        "aggregate_score": 3.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T03:40:47Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/HashShin/coded",
    "host": "github.com",
    "name": "coded",
    "owner": "HashShin"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 42,
      "inputs": {
        "security": 32,
        "vitality": 68,
        "community": 24,
        "governance": 32,
        "engineering": 52
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 68,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "commits_last_year": 76,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 2
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "2/52 weeks with commits",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "76 commits in the last year",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 76
                    }
                  }
                ],
                "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": 12,
              "latest_release_tag": "v0.2.1",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 0.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "12 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 32,
        "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": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 33,
            "inputs": {
              "followers": 4,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "HashShin",
              "public_repos": 6,
              "account_age_days": 965
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "4 followers of HashShin",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 4,
                      "login": "HashShin"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "6 public repos, account ~2 yr old",
                "points": 11.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 6
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 2
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/HashShin/coded"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "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 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "12 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 52,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "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": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 32,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 32,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.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 not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 39,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.963,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "78 of 81 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 78,
                      "sampled": 81
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 81",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 81
                    }
                  }
                ],
                "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": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 121403,
              "source_files_sampled": 21,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/21 source files over 60KB",
                "points": 49.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 21,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T14:31:42.389870Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/HashShin/coded.svg",
  "full_name": "HashShin/coded",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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