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

yongjohnlee80 / golib

Common utility library for Golang

GoMIT★ 0 estrellas⑂ 0 forksdesde abr 2026Ver en GitHub ↗

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

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

48
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

Yong Sung John LeeCuenta personal
43 seguidores26 repositorios públicosdesde abr 2018Monstercat Inc.

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/yongjohnlee80/golibv0.2.2-4hace 7 días

Métricas por categoría

Vitalidad

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

75Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 7 días
4.2/36Cadencia de commits — 6/52 semanas con commits
15.3/18Volumen de commits — 49 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year49
human_commit_share1
days_since_last_push7
active_weeks_last_year6
Cómo se puntúa
16.2/27Publica versiones — 4 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 7 días
27/27Cadencia de publicación — una versión cada ~5,1 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count4
latest_release_tagv0.2.2
releases_from_tags
days_since_latest_release7
mean_days_between_releases5,1
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

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?

54Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 12/12 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/23 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs12
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
11.8/25Alcance del propietario — 43 seguidores de yongjohnlee80
22.4/25Trayectoria — 26 repos públicos, cuenta de ~8 años
Datos de entrada utilizados
followers43
owner_typeUser
is_verified
owner_loginyongjohnlee80
public_repos26
account_age_days3026
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 7 días
12/20Historial de versiones — 4 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/yongjohnlee80/golib
ecosystemsgo
any_deprecatedno
min_days_since_publish7

Calidad de Ingeniería

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

44En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 5 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_cino
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

33En 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 — 0 out of 5 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/23 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — sin datos
0/7.5Vulnerabilities — 24 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate3,3
Excluidos de la puntuación (sin datos o no aplicable): dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. 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.

58Moderado · 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 — 43 de 49 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,878
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — dao/bigquery/go.mod, go.mod (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 49
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifestsdao/bigquery/go.mod, go.mod
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/253 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes58.159
source_files_sampled253
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

0estrellas de GitHub
1contribuidores
49commits en los últimos 12 meses
7días desde el último push
4versiones 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.3 / 10
3.3agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-27 14:24 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 5 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/23 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
0Vulnerabilities24 existing vulnerabilities detected
Dependencias directas 5
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/coder/websocketv1.8.15go.mod
Gogithub.com/jackc/pgx/v5v5.10.0go.mod
Gogolang.org/x/sysv0.46.0go.mod
Gogolang.org/x/termv0.44.0go.mod
Gomodernc.org/sqlitev1.52.0go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1163,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1315900
      },
      "pushed_at": "2026-07-19T21:09:47Z",
      "created_at": "2026-04-06T03:41:52Z",
      "owner_type": "User",
      "updated_at": "2026-07-19T21:09:47Z",
      "description": "Common utility library for Golang",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "yongsunglee.com",
      "name": "Yong Sung John Lee",
      "type": "User",
      "login": "yongjohnlee80",
      "company": "Monstercat Inc.",
      "location": "Vancouver BC",
      "followers": 43,
      "avatar_url": "https://avatars.githubusercontent.com/u/38369998?v=4",
      "created_at": "2018-04-14T04:31:31Z",
      "is_verified": null,
      "public_repos": 26,
      "account_age_days": 3026
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-07-19T21:09:22Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-07-10T05:47:18Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-07-09T02:15:30Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-04T13:25:00Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "3269fd011880935813e877ca10da2b9dbb3ad270",
          "body": "Seven chapters written from building real applications on the package\n(db-tui, ddex-server): getting started, the root-controller pattern,\nthe widget set, event routing and focus, async tasks and the writer\ncontract, floats/modals, and a symptom-first pitfalls catalog. Each\nchapter leads with the failure mode, then the pattern.",
          "is_bot": false,
          "headline": "tui: tutorial series",
          "author_name": "John Lee",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-19T21:09:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "004470df16777e2b62ea925f07b978b44747c7ce",
          "body": "…oss-node focus\n\n- widget.Table: column definitions (fixed widths + one flex) with a\n  header row over a List core.\n- Tabs: ←/→ cycle when focused; WithAutoFocus takes focus on mount;\n  WithoutBar turns Tabs into a pure content switcher.\n- List: WithEmptyText placeholder for empty sources.\n- BufferView: PlainText() extraction and 'y' copies the buffer to the\n  system clipboard.\n- Context.FocusComponent: programmatic focus of another mounted\n  component (RequestFocus is self-only).",
          "is_bot": false,
          "headline": "tui: Table widget; tabs arrow-nav/auto-focus/barless; buffer copy; cr…",
          "author_name": "John Lee",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-19T20:40:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85f622872eb4504aa5c89bf7ac2a22bff3d70989",
          "body": "Flush wrote each frame with a single output.Write and dropped short\nwrites — on a non-blocking tty (makePollable flips O_NONBLOCK on a\nshared stdin/stdout description) the kernel short-writes with EAGAIN\nand the frame tail is lost, leaving apps that render once with only\nthe top of the screen painte\n[…]\nrdWriter capability: WriteClipboard emits OSC 52\n(terminal-side copy — works over SSH and in editor terminals),\noversized payloads keep their tail. TestBackend records clipboard\nwrites for assertions.",
          "is_bot": false,
          "headline": "tui/term: write frames fully on non-blocking ttys; OSC 52 clipboard",
          "author_name": "John Lee",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-19T20:40:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "384f5abd9111cf302a644dc40439c11a93b5810d",
          "body": "… pollability (ADR-0002 §2.9 rev 2)\n\nFound by db-tui e2e (db-tui docs/golib-findings.md #1); reviewed by\nlector (change_requested round on fd ownership + flag restoration,\nthen approved_with_notes).",
          "is_bot": false,
          "headline": "Merge fix/term-reader-unblock: Stop hang on real terminals — input fd…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-10T05:47:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a5330f4926fa0d79c30fc1ea15e0bbdac0185f6",
          "body": "…ollability note (lector approved_with_notes)",
          "is_bot": false,
          "headline": "tui/term: F_DUPFD_CLOEXEC for the fallback dup; ADR-0002 §2.9 rev-2 p…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-10T05:47:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72980ac6ba1a7ab5c1108114299c363f3665b5dc",
          "body": "… review)\n\nReview findings on ecacd5d, both must-fix:\n1. os.NewFile on the caller's own fd created a second owning *os.File\n   that could close/finalize a descriptor the backend never owned —\n   now dup(2) first, wrap only the dup, cleanup closes only the dup.\n   Regression: caller's fd proven usabl\n[…]\ninstead of restoring the prior flag\n   word — now F_GETFL is captured before mutation and restored\n   exactly. Regression: an intentionally-nonblocking caller fd keeps\n   O_NONBLOCK across Start/Stop.",
          "is_bot": false,
          "headline": "tui/term: dup the fallback fd and restore exact F_GETFL flags (lector…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-10T05:43:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ecacd5dd9287972367f7836a3dada2f36e12bfa0",
          "body": "…pollable\n\nA tty inherited on stdin arrives in blocking mode, where\nSetReadDeadline is a silent no-op (os.ErrNoDeadline): Stop's §2.9\nunblock never landed, the pump stayed parked in read(2), and teardown\nhung on wg.Wait — every interactive app hung at exit on a real\nterminal. The lifecycle tests mis\n[…]\nRegression test opens a real pty with the slave as a raw blocking fd\n(the shell-inherited-stdin shape) and gates Stop on a 5s watchdog.\n\nFound by db-tui Phase 2 e2e (db-tui docs/golib-findings.md #1).",
          "is_bot": false,
          "headline": "tui/term: unblock the blocked tty reader at Stop — make the input fd …",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-10T03:53:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "944b626389f4f6711c1282009fc87f3aa85649ec",
          "body": "Standard TUI component framework — core seam (Backend/Surface/Cell/\nTestBackend), ANSI terminal driver, style/token/theme system, UAX\n#11/#29 grapheme tables, App runtime (event queue, pub/sub bus, async\ntasks, timers, component tree, focus, routing, layout), and a v1\nwidget set + demo. Design: 7 ac\n[…]\n38c0). All ADR-0001 §5 gates green: race tests, vet, gofmt,\nLinux+Windows builds, 602/602 UAX #29 conformance, 0-alloc style/\nresolve steady state. go.mod delta: x/term + x/sys (confined to\ntui/term).",
          "is_bot": false,
          "headline": "Merge branch 'tui': golib TUI framework (golib-tui ADRs 0001-0007)",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-09T02:15:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2ac38c078724849ce6f8aa9f5b631f891f11dd56",
          "body": "… impl-review)\n\nMust-fix from the pre-merge implementation review: widget layout,\ncursor, scroll, wrap, and hit-test paths measured text via the\npolicy-blind package tui.StringWidth (WidthPolicyDefault) while Render\npainted through Surface.StringWidth. An app opting into\nWithWidthPolicy(WidthPolicyA\n[…]\nerred).\n\nGates green: go test -race ./tui/..., vet, gofmt, windows\ncross-compile, 602/602 grapheme conformance, new AmbiguousWide test.\nDefault width policy unchanged (existing tests pass unmodified).",
          "is_bot": false,
          "headline": "tui: honor App width policy in widget layout/cursor/hit paths (lector…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-09T02:10:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "29fbc12bbfeaffc3adcbc406eb05c64f27bbd961",
          "body": "Base/Box foundations; TextInput, TextArea, Select[T] (overlay+trap),\nList[T] over the ListSource seam, BufferView w/ concurrent Writer()\nhandle + bounded SGR interpreter, Tabs, Split, Float (modal trap+scrim),\nStatusBar, ProgressBar (subscribes only while animating), Text; Bus\nevent inventory; Overl\n[…]\natus bar) with the\ndeterministic TestBackend CI script asserting idle-zero-flush and\none-flush-per-change. Known follow-up: Context.AbsRect() for anchored\ndropdowns (Select opens palette-style in v1).",
          "is_bot": false,
          "headline": "tui/widget + demo: standard widget set v1 (ADR-0007), ADR-0001 §5 gates",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-08T05:01:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8e917f3b1d3b49131f888fb1e255933aa15b2c6e",
          "body": "…ng, layout (ADR-0004/0005)\n\nScaffold-mirrored Run(ctx) w/ restore-on-panic; App-owned intake (resize\nlatest-wins, motion coalescing, drop-oldest); unbounded lane B w/\nhigh-water logging + opt-in WithEventQueueLimit; always-enqueue Update;\ndemand-armed timer heap (idle = nothing scheduled); typed Bu\n[…]\nmount/unmount cascade w/ comparability panic; mount-order focus\ntraversal + trapping scopes; target-then-bubble routing w/ hit-testing;\nFlex/Dock/Stack w/ deterministic largest-remainder distribution.",
          "is_bot": false,
          "headline": "tui: App runtime, event queue, Bus, tasks, timers, tree, focus, routi…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-08T04:10:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db8b1820ab2a6f56fa89e1f17973c15e4410bd6a",
          "body": "…-0002)\n\nDEC 13-state parser (split-safe, fuzzed), legacy+kitty key decode, SGR\nmouse, byte-exact bracketed paste, DA1-fenced one-write capability probe\n(250ms), R1-R4 flush emitter w/ latched cursor and SGR/CUP dedup,\nreverse-order restore incl. panic paths. Promotes x/term + x/sys to\ndirect deps, confined to this leaf. Linux/darwin/windows builds green.",
          "is_bot": false,
          "headline": "tui/term: ANSI driver — parser, decoder, probe, flush, lifecycle (ADR…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-08T04:02:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "980a6c43ffa40f94d926b4c92490df3d17a64f0c",
          "body": null,
          "is_bot": false,
          "headline": "tui: functional key-code constants (kitty PUA + C0 legacy)",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-08T03:25:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52a06089fa69a88d2e7e782b310d0b91769c7b88",
          "body": "… (ADR-0002/0003)\n\nBackend interface w/ Err() + Capabilities (ColorProfile, DarkBackground,\ntri-state Mouse); event set per ADR-0005; grapheme-cell double buffer\nwith W1-W3 wide-cell invariants and 0-alloc diff; clipped Surface with\nWidthPolicy and rev-1 Fill rule; bounded style resolver (0-alloc hits,\ntruecolor->256->16->mono); TestBackend with inject/snapshot/violations.\nCells carry resolved CellAttrs (ADR-0006 §2.6 reading of ADR-0003 §2.1).",
          "is_bot": false,
          "headline": "tui: core seam, events, cells, buffer, Surface, resolver, TestBackend…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-08T03:24:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e59cf6a9eef2ef1e1fcf1dcf3d7e38dbb2acff8",
          "body": "Typed fields + uint64 set-bitfield (lipgloss v0.11 model), comparable\nvalue semantics, 20-token theme with §2.5 derivation defaults,\nANSI-16-first, flatten-at-set-time ColorSpec, COW extras with one-clone\nApply batching. Setter chain 0 allocs; race-clean; stdlib-only.",
          "is_bot": false,
          "headline": "tui/style: Style, Color, Token/Theme, borders, Ext (ADR-0006)",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-08T03:05:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20ba64543f72e2f8f6c4074434759a8788cba670",
          "body": "…003 §2.7)\n\nGenerated from UCD 15.0.0 (matches Go 1.25 unicode.Version; ADR's 16.0.0\nsketch was an erratum). Clusters/ClusterWidth/StringWidth per the fixed\ninternal contract; GraphemeBreakTest 602/602; StringWidth alloc-free.\nGB9c (15.1 InCB) documented as deferred with the refresh procedure.",
          "is_bot": false,
          "headline": "tui/internal/grapheme: UAX #11/#29 tables, segmentation, width (ADR-0…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-08T03:02:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ee0765d5b4b37748e995927ec559f06fd66db67",
          "body": "…proved) from KB",
          "is_bot": false,
          "headline": "docs(tui): mirror accepted golib-tui ADRs 0001-0007 (rev 1, lector-ap…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-08T02:49:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a2cc3cac981f292e2458dd7f098b46ad23e8386",
          "body": "Now that the root module is tagged v0.1.0, the nested bigquery module can\nrequire the real version instead of require v0.0.0 + replace => ../.., which\nbroke external 'go get' of the submodule. Builds and unit-tests green against\nthe published tag (go 1.25.3 local toolchain).",
          "is_bot": false,
          "headline": "dao/bigquery: depend on golib v0.1.0, drop local replace",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T14:14:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6eb96ea41a204b2da404534d9481cc984aade48",
          "body": "Every package gets an intro + basic/advanced usage + how-to-extend, the\nmain README links them all, and several stale/incorrect docs are corrected.\n\nNew:\n- server/README.md — the transport-agnostic core (router, chain, lifecycle,\n  Scaffold, Registry) with the two-transport-family extension story an\n[…]\ntgres is\n  not 'the only golib package with a DB dependency'.\n- dao README + USAGE: removed the non-existent .Insert2() from examples.\n\nDocs-only + comment-only doc.go edits; go build and gofmt clean.",
          "is_bot": false,
          "headline": "docs: comprehensive README pass across all packages",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T13:25:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c71651e7d48243d353b4d14f4cb5512e74e06f3e",
          "body": "New golib/partial package — the wire half of the partial-update story.\nParse-once Patch[T]: source-order json.Decoder into per-field raw slots\nkeyed by canonical effective JSON names from a per-T cached plan (pointer\nembeds + $clear-named fields panic loudly); three-state Absent/Present/\nCleared und\n[…]\nthe only dao import); Patch composition for nesting.\nstdlib-only except the adapter. ADR flipped to Accepted (rev 3, lector r2\napproved). Acceptance criteria 1-8 in partial_test.go; module race-clean.",
          "is_bot": false,
          "headline": "partial: generic partial-payload package Patch[T] (golib-partial-0001)",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T11:45:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d0b997ea4f91a7e11fa45cabec7aee39d3d08db",
          "body": "must-fix #1: bind via source-order json.Decoder token loop (last canonical\nslot wins) instead of map[string]json.RawMessage, restoring encoding/json\nlast-matching-key parity across case-fold collisions; deterministic, pinned\nin acceptance criterion 4.\nmust-fix #2: one clear namespace — ClearKey rese\n[…]\nt level; planFor[T] panics on a model field canonically\nnamed $clear; $clear entries canonicalize through the plan with unknowns\ndropped at bind, so Fields/State/Rules/Empty hold only canonical names.",
          "is_bot": false,
          "headline": "docs/partial: ADR-0001 revision 2 — apply lector r1 review amendments",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T11:45:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2205be78f7446a007c8880162bee4ae527d21665",
          "body": "…oposed)\n\nThe wire half of the partial-update story (golib-partial-0001, plan §3.2):\nparse-once Patch[T] with per-field raw slots keyed by canonical effective\nJSON names from a per-T cached plan (pointer embeds panic loudly);\nthree-state semantics with a declared ClearMode (ClearOnNull default,\nExpl\n[…]\nntics hardened (last-mutation-wins-over-clear, loud unknown fields);\nRules() projection + ApplyRules adapter onto dao ADR-0010's SetRules —\nzero per-entity code. json/v2 deferred (GOEXPERIMENT-gated).",
          "is_bot": false,
          "headline": "docs/partial: ADR-0001 — generic partial-payload package Patch[T] (pr…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T11:45:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f1e0f72a54d82559839e443e2301105005615b0a",
          "body": "…ransport (golib 11)\n\nImplements the two accepted server ADRs per their file plans.\n\nADR-0006 — transport scaffold & session registry (core, zero-dep):\n- server/registry.go: Session/Drainer + Registry with the atomic\n  Reserve/Reservation pre-establishment gate. Drain prefers Drainer.Drain\n  over Cl\n[…]\nundary/\npre-handshake-503-gate/read-limit/keepalive/dep-isolation). go vet clean and\ngo test -race green module-wide; core packages remain dependency-free (go\nlist -deps confirms 0 websocket imports).",
          "is_bot": false,
          "headline": "server: implement ADR-0006 scaffold+registry and ADR-0007 WebSocket t…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T11:41:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c273f0dfb3d8c744252550d42697b0d03fcfe3b9",
          "body": "The r1 blocker (pre-handshake drain gate) is closed by the\nReserve/Reservation API; r2 review approved with no further amendments.\nBoth ADRs flip Proposed -> Accepted; §7 review histories record r2.",
          "is_bot": false,
          "headline": "docs/server: ADR-0006/0007 accepted — lector r2 approved",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T11:41:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2208615f408aff39f437af757afa28bc26088ebe",
          "body": "…tor r1 must-fix)\n\nThe 0007 promise 'upgrade attempts during drain are refused with 503' had\nno API to keep it: Handler only saw the post-accept registry, and after\nAccept sends 101 there is no HTTP response left. Revision 2 adds the\natomic Reserve/Reservation API to ADR-0006's Registry (Reserve fai\n[…]\n handshake — 503 on\nrefusal, Complete/Cancel afterward — closing the accept-then-instant-\nclose window. Acceptance criteria updated to test the user-observable\nboundary; review-history sections added.",
          "is_bot": false,
          "headline": "docs/server: ADR-0006/0007 revision 2 — pre-handshake drain gate (lec…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T11:41:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "464bc23d05ee7e3712294784f3a5d196fbc67a85",
          "body": "… WebSocket transport (proposed)\n\nADR-0006: the reusable accept-loop Scaffold (bind-or-injected listener,\nper-conn goroutine+ctx, structured accept errors w/ backoff, panic\nisolation) + the drain-aware Session/Registry consumed by scaffold AND\nhttpserver.Shutdown (hijacked connections finally drain \n[…]\neAllowOrigins, 1MiB read limit, ping/pong keepalive). One\nleaf-only dependency: github.com/coder/websocket; core stays zero-dep.\n\nAuthored for golib 09; implementation follows review as separate work.",
          "is_bot": false,
          "headline": "docs/server: ADR-0006 transport scaffold & session registry; ADR-0007…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T11:41:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac81f32270a705887f6a2121ba936c738ce4dcc6",
          "body": "Typed Rule vocabulary (Write/Skip/Clear) staged via the new DAO.SetRules\nintent method; Field gains Clearable/ClearValue (NOT-NULL sentinels,\nvalidated at dao.New); rules resolve at SetRules time and apply as the\nlast stagedSet() layer — order-independent, last rule per field wins.\nNon-clearable cle\n[…]\nn unknown/ReadOnly keys (wire-facing); Set/SetMap stay loud.\nFluent Clear() honors a declared ClearValue. ADR flipped to Accepted\n(rev 3, lector r2 approved). Acceptance criteria 1-8 in rules_test.go.",
          "is_bot": false,
          "headline": "dao: partial-update rules & per-column clearability (ADR-0010)",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T10:55:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bddae133cd725efefbb6f2f5bfbacca3e422bb83",
          "body": "must-fix #1: strict-clear violations carried on the field's resolvedRule\n(err carrier) instead of the sticky DAO first-error path; replaced by any\nlater rule for the same field; surfaced via stagedSet() (orderedSet, error)\nonly as the field's final rule. Preserves last-rule-wins / order-independent\nresolution under StrictClears. Criterion 4 gains the replacement cases;\nreview-history section added.",
          "is_bot": false,
          "headline": "docs/dao: ADR-0010 revision 2 — apply lector r1 review amendments",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T10:55:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d22a6ad22d05754cadc12f2e75bf056149a64004",
          "body": "…proposed)\n\nTyped Rule vocabulary (Write/Skip/Clear) applied via a new DAO.SetRules\nintent method; clearability declared per column on Field (Clearable /\nClearValue for NOT-NULL sentinels); LM's wire-safe downgrade-to-skip\ndefault with an opt-in StrictClears schema option; order-independent\nresolution as one step in stagedSet(); pins the rules-projection\ncontract golib-partial-0001 consumes (zero per-entity code).",
          "is_bot": false,
          "headline": "docs/dao: ADR-0010 — partial-update rules & per-column clearability (…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T10:55:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be53d47de241e0ac9fe5fc537f9cb5915172380e",
          "body": "…am (golib 10)\n\nImplements the accepted ADR-0009 (rev 3) per its file plan:\n\n- dao/hooks.go (new): Op discriminator (incl. the OpBatch/OpBatchCopy\n  split), QueryInfo, Outcome, the type-erased Stager surface with per-op\n  semantics (Where fails loudly with ErrHookWhereUnsupported on\n  insert/upsert \n[…]\nnts, and execution-only Iterate.\n\nThe full pre-ADR test suite passes unmodified; module-wide go vet and\ngo test -race are green. Closes the last conventions-divergence row\n(dao per-call ctx) on merge.",
          "is_bot": false,
          "headline": "dao: implement ADR-0009 — query-time options & the hook/middleware se…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T10:21:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a40e04692a96807a967b54ca780073c97e5cac0",
          "body": "approved_with_amendments r2 (agents/lector/reviews/\n2026-07-04-golib-dao-adr-0009-rereview.md): tightened §2.6 COPY wording\n(no non-error veto signal — a hook error fails the flush per the §2.4\nabort rule; rewriteable bulk statements mean chunked INSERT), corrected\nthe file-plan criteria count to 1-9, recorded r2 in §7, flipped status\nProposed -> Accepted.",
          "is_bot": false,
          "headline": "docs/dao: ADR-0009 revision 3 — lector r2 nits; status Accepted",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T10:21:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "348274c55b3a5feca4953c8b33f392ec02daf903",
          "body": "change_requested r1 (agents/lector/reviews/2026-07-04-golib-dao-adr-0009-review.md):\n- must-fix: per-op Stager semantics — Where covers the where-capable ops\n  only; on INSERT/UPSERT it fails loudly with ErrHookWhereUnsupported\n  instead of pretending to scope; the tenant example branches on Op and\n\n[…]\nes: duplicate hook names panic at dao.New; SkipHooks skips all\n  bearers; identifier trust wording strengthened.\nAcceptance criteria expanded to 9 incl. the new failure modes. §7 review\nhistory added.",
          "is_bot": false,
          "headline": "docs/dao: ADR-0009 revision 2 — apply lector r1 review amendments",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T10:21:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "661776e23f3896c831a1a1eb4d1fa76f9c3a9eeb",
          "body": "…sed)\n\nSpecifies the query-time extensibility seam the 2026-07-04 audit named the\npackage's largest gap vs LM's DAL: a single three-phase Hook pipeline\n(BeforeBuild intent mutation via a type-erased Stager / BeforeExec SQL+args\nobserve-or-rewrite / AfterExec outcome + error transform) with an Op\ndis\n[…]\n-hooks fast path. Re-establishes docs/dao/ as the in-repo home of the\ndossier (ADR-0001..0008 predate the repo's docs tree).\n\nAuthored for golib 06; implementation follows review as a separate change.",
          "is_bot": false,
          "headline": "docs/dao: ADR-0009 — query-time options & hook/middleware seam (propo…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T09:38:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "994540614411510bca045b7166c739cf86a8fe02",
          "body": "…o, Entry/Fields/slog, stdlib-shaped collections (golib 05)\n\nAligns the utility packages with shared/conventions/golib.md (audit\n2026-07-04, phase 1) — this empties the divergences table except the dao\nper-call-ctx row, which belongs to the ADR-0009 seam design.\n\nthreadsafe:\n- Value[T].Lock()/Unlock\n[…]\n the ErrResponseTooLarge\n  sentinel (errors.Is-able).\n\nDocs: threadsafe README added; collections/ingestor/logger/root READMEs\nupdated for the new surfaces. All packages pass go vet and go test -race.",
          "is_bot": false,
          "headline": "conventions-alignment sweep: options idiom, ctx-first ingestor, Do/RD…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T01:38:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36d3e81f47d3e169857e726de97b7bd5d45cb5c3",
          "body": "…t scan arity, go 1.25.3 deps (golib 04)\n\nResolves the three must-fixes from lector's 2026-06-23 implementation\nreview (status change_requested):\n\n1. Numeric scan corruption: assign() used reflect Convert for any numeric\n   pair, silently wrapping negative→unsigned, overflowing narrow ints,\n   and t\n[…]\nmpanion should-fix (require golib v0.0.0 + replace => ../..\nbreaks external 'go get' of the nested module) needs version tags on the\nroot module to resolve — surfaced separately as a release decision.",
          "is_bot": false,
          "headline": "dao/bigquery: resolve review must-fixes — checked numeric scan, stric…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T01:11:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "929a3b0b6b480f31ac75a1471874fdaaf63e84de",
          "body": "…008)\n\nA dao.DataConn for BigQuery in a separate nested module so the heavy GCP SDK is\npulled only by callers that use it; the golib/dao core stays dependency-light.\n\n- BigQueryDialect: backtick QuoteIdent, ? positional placeholders, and the\n  no-transaction / no-upsert / no-RETURNING / no-LastInser\n[…]\nowIterator -> []bigquery.Value -> positional\n  Scan (INT64/FLOAT64/DATE/DATETIME/NUMERIC conversions), per LM's ValueLoader\n- creds-free unit tests + build-tagged, env-gated integration tests + README",
          "is_bot": false,
          "headline": "dao/bigquery: BigQuery driver over the no-transaction contract (ADR-0…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T01:11:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a63ae9b029ae780d3da583acae51eb10dc10d3aa",
          "body": "Generalize the one DataConn/Dialect contract to OLAP / append-only stores\n(BigQuery first) without a parallel DAO hierarchy.\n\n- add dao.ErrUnsupported sentinel\n- add Dialect capability predicates SupportsTransactions / SupportsUpsert /\n  SupportsLastInsertID, defaulted on GenericDialect (postgres/sq\n[…]\nTURNING nor LastInsertID runs the DML and returns the\n    zero id with a nil error (documented no-generated-id insert)\n- capabilities_test.go covers all of the above incl. untouched-no-tx-conn-commits",
          "is_bot": false,
          "headline": "dao: read-mostly / no-transaction driver contract (ADR-0008)",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T01:11:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed8e1f798a9890a077475392bf63aadedabc4e02",
          "body": "StringOp rendered `col ILIKE ?`, but ILIKE is Postgres-only — it fails on\nSQLite and MySQL. Render `LOWER(col) LIKE LOWER(?)` instead, which is\ncase-insensitive on Postgres, SQLite, and MySQL alike. Updated the search-op\ntests and the USAGE note accordingly.\n\nFound while building a SQLite-backed consumer of the dao package.",
          "is_bot": false,
          "headline": "dao: make StringOp case-insensitive match portable across dialects",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T01:11:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7793c6e84e574c54f842a4dca7dfe7e0a9b76fae",
          "body": "…acters in StringOp (golib 03)\n\nTwoPhase().Commit() previously ran a support check and then the ordinary\nordered commit — 2PC was advertised but non-functional, and no dialect\nreported TwoPhaseSupported() (ADR-0005 acceptance criterion 6 unmet).\n\nEngine:\n- Dialect gains the ADR's two-phase trio: Pre\n[…]\neLike helper with an explicit ESCAPE\nclause — searching \"50%\" matches literally instead of wildcarding.\nLike() keeps raw-pattern semantics by design; its doc now says to use\nEscapeLike for user input.",
          "is_bot": false,
          "headline": "dao: implement two-phase commit (ADR-0005 §2.3); escape LIKE metachar…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T00:59:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96e68a04cae34fd2958500333c6f11d80c094c2f",
          "body": "…r (golib 02)\n\nstatusRecorder embedded the http.ResponseWriter interface, which promotes\nonly Header/Write/WriteHeader — type assertions for http.Hijacker,\nhttp.Flusher, http.Pusher, and io.ReaderFrom failed on the wrapper, so any\nWebSocket upgrade behind RequestLogger errored ('response does not\nim\n[…]\na clear message\n  (matching the bad-route startup policy): the router is build-then-read\n  and a late registration was a silent data race against dispatch.\n\nAll packages pass go vet and go test -race.",
          "is_bot": false,
          "headline": "server/http: forward optional writer interfaces through statusRecorde…",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T00:32:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "44a2a39ecca299ddd02a6894f5dbff0b5ca04fd1",
          "body": "request:\n- Params.Timeout is now a true time.Duration (was multiplied by\n  time.Second, so idiomatic values overflowed into ~infinite deadlines;\n  Get/Post hardcoded ~27.7h). Zero means DefaultTimeout (10s), negative\n  means no timeout. Request no longer mutates params.Timeout.\n- New ctx-first Do(ct\n[…]\n/JSON writers now\n  have full test coverage (content, batching, filename format, error\n  aggregation via BatchErrors, concurrent Commit/Flush under -race).\n\nAll packages pass go vet and go test -race.",
          "is_bot": false,
          "headline": "request, ingestor: P0 correctness fixes (audit 2026-07-04, golib 01)",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-07-04T00:26:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8d8782758b9c1f1f4a3643ecb19266b665e8e9bf",
          "body": "Extends the single-process scaffold into a concurrent, multi-session suite that\nexercises golib/dao + dao/postgres against a real Postgres, driven through the new\ngolib/server/http component and the golib request client.\n\n- testdata/migrations/0001_integration_schema.sql: sql-migrate Up/Down for\n  g\n[…]\n distinct RETURNING ids, and an on-demand join.\n\nBuild-tagged `integration`; skips without TEST_PGURL. Verified green (13/13) under\ngo test -tags integration -race ./dao/postgres/ against Postgres 16.",
          "is_bot": false,
          "headline": "dao/postgres: two-process integration tests over the HTTP server",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-06-19T13:14:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f4bc90fe0a693dd22f6fdba55bfe78830c5da466",
          "body": "golib/server is a generic, dependency-free routing/middleware/lifecycle core;\ngolib/server/http (package httpserver) is the net/http transport layered on top,\ngiving chi-style ergonomics over that core. It complements the request client.\n\nCore (golib/server, stdlib-only):\n- Router[H]: generic tree r\n[…]\nts.\n\nFully doc-commented with runnable godoc examples. Tests pass under -race; the core\ncarries no third-party deps, and the transport's only runtime deps are logger and\nserver (request is test-only).",
          "is_bot": false,
          "headline": "Add server: transport-agnostic HTTP server subsystem",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-06-19T13:14:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "45e626beaaf1161393930bfd3da630a2738ef842",
          "body": "New packages:\n\n- logger: small, zero-dependency, toggleable, level-based logging hook. The\n  Logger interface is shape-identical to monstercat/golib/logger; Adapt bridges\n  any external logger without a dependency.\n\n- dao: generic DAL core (zero external dependencies). One declaration per entity\n  d\n[…]\ne normal go test suite.\n\nDocs: dao/README.md (reference) + dao/USAGE.md (cookbook) + per-driver READMEs.\nThe design ADRs for this package are maintained in the team knowledge base rather\nthan in-repo.",
          "is_bot": false,
          "headline": "Add dao: generic driver-agnostic data-access layer, plus logger",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-06-19T05:57:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "570f2f1b741b4009f385a196da15fbc1b6e72f61",
          "body": null,
          "is_bot": false,
          "headline": "README updated",
          "author_name": "John Lee",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-04-06T10:31:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09c668ec1c0b3f9906ebbbe724c7db663046bfc6",
          "body": null,
          "is_bot": false,
          "headline": "request pkg added",
          "author_name": "John Lee",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-04-06T10:25:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0e313a0524c2eee02ba9290c7f0298c699b9934",
          "body": null,
          "is_bot": false,
          "headline": "collections and license added",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-04-06T04:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bcd5c32831e8576ed4c56c453df23b978214a43",
          "body": null,
          "is_bot": false,
          "headline": "initial commit",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-04-06T04:09:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "784befc2ba78f679448ce57767dc91a6147ab1f9",
          "body": null,
          "is_bot": false,
          "headline": "first commit",
          "author_name": "johno",
          "author_login": "yongjohnlee80",
          "committed_at": "2026-04-06T03:43:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 49,
      "latest_release_at": "2026-07-19T21:09:22Z",
      "latest_release_tag": "v0.2.2",
      "releases_from_tags": true,
      "days_since_last_push": 7,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 7,
      "mean_days_between_releases": 5.1
    },
    "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/yongjohnlee80/golib",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/yongjohnlee80/golib",
          "is_deprecated": false,
          "latest_version": "v0.2.2",
          "repository_url": "https://github.com/yongjohnlee80/golib",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T21:09:22Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 7
        }
      ]
    },
    "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": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "dao/bigquery/go.mod",
        "go.mod"
      ],
      "largest_source_bytes": 58159,
      "source_files_sampled": 253,
      "oversized_source_files": 0,
      "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": [
        {
          "name": "github.com/coder/websocket",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.15"
        },
        {
          "name": "github.com/jackc/pgx/v5",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.10.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.46.0"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.44.0"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.52.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 12,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "yongjohnlee80",
          "commits": 49,
          "avatar_url": "https://avatars.githubusercontent.com/u/38369998?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 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": 0,
            "reason": "0 out of 5 merged PRs checked by a CI test -- score normalized to 0",
            "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/23 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "24 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "3269fd011880935813e877ca10da2b9dbb3ad270",
        "ran_at": "2026-07-27T14:24:18Z",
        "aggregate_score": 3.3,
        "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-19T21:09:44Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-04T13:25:00Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/yongjohnlee80/golib",
    "host": "github.com",
    "name": "golib",
    "owner": "yongjohnlee80"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 48,
      "inputs": {
        "security": 33,
        "vitality": 75,
        "community": 24,
        "governance": 54,
        "engineering": 44
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 75,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "commits_last_year": 49,
              "human_commit_share": 1,
              "days_since_last_push": 7,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "49 commits in the last year",
                "points": 15.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 49
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v0.2.2",
              "releases_from_tags": true,
              "days_since_latest_release": 7,
              "mean_days_between_releases": 5.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 12,
              "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": "12/12 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 12,
                      "decided": 12
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/23 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "followers": 43,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "yongjohnlee80",
              "public_repos": 26,
              "account_age_days": 3026
            },
            "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": "43 followers of yongjohnlee80",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 43,
                      "login": "yongjohnlee80"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "26 public repos, account ~8 yr old",
                "points": 22.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 26
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/yongjohnlee80/golib"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 7
            },
            "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 7 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Engineering Quality",
        "value": 44,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "0 out of 5 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": 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": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 33,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 33,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 3.3
            },
            "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": "0 out of 5 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/23 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "24 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 58,
        "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.878,
              "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": "43 of 49 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 43,
                      "sampled": 49
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 62,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "dao/bigquery/go.mod",
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "dao/bigquery/go.mod, go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "dao/bigquery/go.mod, 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": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 49",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 49
                    }
                  }
                ],
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 58159,
              "source_files_sampled": 253,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/253 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 253,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T14:24:28.324760Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/y/yongjohnlee80/golib.svg",
  "full_name": "yongjohnlee80/golib",
  "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.