原始 JSON 报告 机器可读
{
"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"
}