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

croc100 / Litescope

The operations toolchain for production SQLite — diff, migrate, monitor, and run staged migrations across an entire fleet of Turso & Cloudflare D1 databases.

Go · TypeScriptAGPL-3.0★ 1 estrella⑂ 0 forksdesde jun 2026Ver en GitHub ↗

croc100/Litescope tiene un índice de salud de 53 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (76/100) y la más baja, Security (29/100). Se actualizó por última vez hace 13 días. Una sola persona concentra la mayor parte del trabajo reciente.

53
global / 100
Moderado

Índice de salud del software

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

53
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

croc100Cuenta personal
7 seguidores33 repositorios públicosdesde jul 2020

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ónEtiquetas
Gogithub.com/croc100/litescopev0.8.0-21hace 13 días
npmlitescope0.8.020788hace 13 díassqlitecloudflared1tursomcpmigrationschema-diffwrangler

Métricas por categoría

Vitalidad

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

67Moderado · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 13 días
4.2/36Cadencia de commits — 6/52 semanas con commits
18/18Volumen de commits — 219 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year219
human_commit_share1
days_since_last_push13
active_weeks_last_year6
Cómo se puntúa
27/27Publica versiones — 13 versiones publicadas
36/36Recencia de las versiones — última versión hace 13 días
27/27Cadencia de publicación — una versión cada ~1,8 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count13
latest_release_tagv0.8.0
releases_from_tagsno
days_since_latest_release13
mean_days_between_releases1,8

Comunidad y Adopción

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

32En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 1 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (AGPL-3.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
44.2/80Descargas mensuales — 2078 descargas/mes en go, npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesgithub.com/croc100/litescope, litescope
dependents
ecosystemsgo, npm
total_downloads
monthly_downloads2078
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

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
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 11/11 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs11
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
6.5/25Alcance del propietario — 7 seguidores de croc100
23.2/25Trayectoria — 33 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers7
owner_typeUser
is_verified
owner_logincroc100
public_repos33
account_age_days2211
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 — 2 paquete(s) en go, npm
35/35Recencia de publicación — última publicación hace 13 días
20/20Historial de versiones — 21 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/croc100/litescope, litescope
ecosystemsgo, npm
any_deprecatedno
min_days_since_publish13

Calidad de Ingeniería

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

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

Documentación

100Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://litescope.crode.net
10/10Descripción del repositorio
10/10Topics — 15 topics
10/10Wiki
Datos de entrada utilizados
topicscli, cloudflare-d1, database, devops, golang, migration, monitoring, schema-diff, sqlite, turso, database-migration, database-tools, edge-database, fleet-management, mcp
has_wiki
homepagehttps://litescope.crode.net
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?

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

Preparación para IA

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

55Moderado · 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 — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — go.mod (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — gui/frontend/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum, package-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configsgui/frontend/tsconfig.json
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54/55Tamaños de archivo manejables — 3/160 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes164.470
source_files_sampled160
oversized_source_files3
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

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

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 2.9 / 10
2.9agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities33 existing vulnerabilities detected
Dependencias directas 5
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/charmbracelet/lipglossv1.1.0go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogithub.com/wailsapp/wails/v2v2.12.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.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": [
        "cli",
        "cloudflare-d1",
        "database",
        "devops",
        "golang",
        "migration",
        "monitoring",
        "schema-diff",
        "sqlite",
        "turso",
        "database-migration",
        "database-tools",
        "edge-database",
        "fleet-management",
        "mcp"
      ],
      "is_fork": false,
      "size_kb": 61561,
      "has_wiki": true,
      "homepage": "https://litescope.crode.net",
      "languages": {
        "Go": 920258,
        "CSS": 23,
        "HTML": 90498,
        "NSIS": 13156,
        "Shell": 1992,
        "Dockerfile": 663,
        "JavaScript": 16457,
        "TypeScript": 141520
      },
      "pushed_at": "2026-07-14T02:10:52Z",
      "created_at": "2026-06-09T11:38:29Z",
      "owner_type": "User",
      "updated_at": "2026-07-14T02:10:54Z",
      "description": "The operations toolchain for production SQLite — diff, migrate, monitor, and run staged migrations across an entire fleet of Turso & Cloudflare D1 databases.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "AGPL-3.0",
      "default_branch": "main",
      "license_spdx_raw": "AGPL-3.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "croc100",
      "type": "User",
      "login": "croc100",
      "company": null,
      "location": null,
      "followers": 7,
      "avatar_url": "https://avatars.githubusercontent.com/u/67980944?v=4",
      "created_at": "2020-07-07T20:59:39Z",
      "is_verified": null,
      "public_repos": 33,
      "account_age_days": 2211
    },
    "license": {
      "state": "standard",
      "spdx_id": "AGPL-3.0",
      "raw_spdx": "AGPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-07-14T02:11:16Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-07-13T19:53:49Z"
        },
        {
          "tag": "v0.6.7",
          "kind": "patch",
          "published_at": "2026-07-01T09:27:41Z"
        },
        {
          "tag": "v0.6.6",
          "kind": "patch",
          "published_at": "2026-06-28T08:25:57Z"
        },
        {
          "tag": "v0.6.5",
          "kind": "patch",
          "published_at": "2026-06-28T07:53:45Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2026-06-28T07:43:14Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2026-06-27T21:42:37Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-06-27T21:18:35Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-06-27T20:52:34Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-06-27T20:07:34Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-06-26T17:12:17Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-06-25T08:50:23Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-06-10T18:09:04Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "8eff65541a3827277e141d390658c5d1cc9e406f",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.8.0",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-14T02:10:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "916dd06949ad47f44ab801f928d13bcc6b0aa584",
          "body": "In-dashboard live audible/visual alarm plus notification channels (email,\nSlack, Discord, Telegram, Teams) triggered on severity/staleness/WAL\nthresholds, evaluated on the existing Cloudflare free tier + D1 Cron.",
          "is_bot": false,
          "headline": "docs(roadmap): expand Phase I hosted-dashboard alerting",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-14T02:08:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8238788968ced15a4557cd269283343d5d4afe1",
          "body": "The desktop app and CLI are fully free; the only paid product is the\nhosted Litescope Cloud control plane. This removes the incoherent\nconsumer 'Pro' story that never had a working purchase→key loop:\n\n- GUI: drop the client-side ProGate (a fakeable localStorage prefix\n  check), the connection cap, t\n[…]\ne license section with a\n  Litescope Cloud (hosted) info card + About.\n- CLI: strip stale '(Pro)' / 'Pro feature' claims from help text and\n  comments; IsPro already returns true so nothing was gated.",
          "is_bot": false,
          "headline": "refactor: hosting-only monetization — remove fake Pro gating",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-13T20:58:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dec21ce3dbaf7db31625348c4fd337ee69b07a68",
          "body": "…ments\n\nReads Developer ID and notarization credentials from the environment (never\ncommitted). Builds universal, signs with hardened runtime, notarizes via\nnotarytool, staples, and runs a Gatekeeper check.",
          "is_bot": false,
          "headline": "build(gui): macOS sign + notarize script and hardened-runtime entitle…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-13T20:45:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60b5983bae0f6e62f6129fdc7654f41dc69d1f4a",
          "body": "- File ▸ Open Recent: native submenu mirrored from the frontend recent\n  list via a bound SetRecentFiles; entries open their DB, plus Clear Menu.\n- Settings: add an About card (version, tagline, docs/GitHub/issues/\n  changelog links) — previously license-only.\n- macOS About panel: real version, tagline and copyright.\n- App icon: replace the Wails placeholder with the Litescope brand mark\n  (regenerates .icns/.ico on build).",
          "is_bot": false,
          "headline": "feat(gui): Open Recent menu, About panel, branded app icon",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-13T20:45:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3b6b84ba180c67be7e21e27d4ab870a7c3afef1",
          "body": "Add a proper native application menu (File/Edit/View/Window with Open\nDatabase, Open Fleet Config, Settings, toggle sidebar, reload, fullscreen)\nso standard shortcuts — including copy/paste in the WKWebView — work.\n\nFix the titlebar drag strip: it used -webkit-app-region, which WKWebView\nignores, so\n[…]\nrty. Wails does not\nforward double-clicks on drag regions to the native window zoom, so wire an\nonDoubleClick that calls WindowToggleMaximise, restoring the expected\ndouble-click-to-maximize behavior.",
          "is_bot": false,
          "headline": "feat(gui): native menu bar + double-click-to-maximize titlebar",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-13T20:29:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e30d33bd249cfc9751c5458b5f3630f696fd62b9",
          "body": "Roll up every database's recorded lock contention into one worst-first\nfleet view: locked windows, wait p95, top holders, and WAL checkpoint\nstarvation, ranked critical/contended/clear. JSON output and exit-1 on\nany contention for cron/paging. Remote sources (D1/Turso) have no local\nlock file and ar\n[…]\nr-database contention timeline (BuildLockTimeline) to the\nfleet level via a pure BuildFleetLockReport aggregator, reading the same\nshared history store that the dashboard and 'locks --watch' populate.",
          "is_bot": false,
          "headline": "feat(fleet): fleet-wide lock doctor (fleet locks)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-13T20:06:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "389139b6f2aa8e8900d924fb0008f9f753a126d7",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.7.0",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-13T19:52:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c9c3d66586bf1a69a34132430f4d138c977334d",
          "body": "Proof asset for the spike: a self-contained animated SVG terminal that\nreplays the differentiator — query_write dry-run (exact blast radius) ->\napply (returns a rewind_token) -> write_undo (one-call revert). Pure\nper-line CSS @keyframes on a single shared 15s cycle, so it loops in\nphase and animates\n[…]\nitHub. No JS, no external\nservice, no recording infra.\n\nAlso point the README one-liner at the agent-safe-writes positioning to\nmatch the site hero, and lead the intro with the change-then-undo story.",
          "is_bot": false,
          "headline": "docs: animated reversible-write demo + align README tagline",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-02T13:16:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b1c8f22f6b1f569f569d6f4e9cf54193c72a5b7f",
          "body": "Discoverability (the named weak spot): a JSON blob was the only setup\npath. Add one-liners per client —\n\n- Claude Code: claude mcp add litescope -- litescope mcp (+ writes/D1 form)\n- Cursor: one-click deeplink (installs read-only, no secrets embedded)\n- MCP Registry namespace called out (io.github.c\n[…]\nthe\nHTTP bearer+Origin controls — plus an explicit table of what each layer\ndoes NOT protect against. No overclaiming: Litescope makes agent writes\nmeasurable and reversible, it is not a SQL firewall.",
          "is_bot": false,
          "headline": "docs: one-line MCP installers + honest security model",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-02T13:07:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4511aaf7a5227f1e4e39b96f374ac60cfdb890da",
          "body": "The hero led with the broad 'ops layer' umbrella and a five-item\nfeature list — the exact 'Swiss-army-knife' blur we want to avoid. Lead\ninstead with the one thing no other SQLite/D1 MCP server does: a\nreversible-write contract.\n\n- H1 + sub reframed: 'Let AI agents touch production SQLite — safely.'\n[…]\n/ og / meta description updated to match.\n- KO/ZH/JA translations added for the new hero + problem strings.\n\nOps-layer sections below the fold are unchanged — kept as proof of\ndepth, not the headline.",
          "is_bot": false,
          "headline": "docs(site): re-point hero to agent-safe writes for SQLite & D1",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-02T13:03:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c835402df4d9e1422d6174fc58c0e09cfc21e96c",
          "body": "litescope_query_write / litescope_migrate_apply now give D1 the same\ncontract as local files, backed by D1's own physics:\n\n- apply=true captures the current Time Travel bookmark BEFORE executing\n  and returns it as a rewind_token; if the bookmark cannot be captured,\n  the write is refused rather tha\n[…]\n+ D1TimeTravelToBookmark; Cloudflare API\n  root extracted to APIBase so tests can stub it with httptest.\n\nTurso remains execute-only (no server-side time travel) with a clearer\nsnapshot-first warning.",
          "is_bot": false,
          "headline": "feat(mcp): extend reversible-write contract to Cloudflare D1",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-02T12:50:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "23fa4712fb7655ab316c6135d1233909cafc1c0b",
          "body": "Aggregate recorded lock observations into a per-DB contention time-series:\nlitescope locks <db> --timeline (--since, --format json). Surfaces\ncontention windows (when/how long the DB was jammed), wait-time max/p95,\ntop lock holders, and WAL-checkpoint bloat over time.\n\n- track WAL size per lock event (new lock_events.wal_bytes column + migration)\n- BuildLockTimeline pure aggregator in dashboard, with unit tests\n- CLI --timeline renderer + JSON output; exit 1 on past contention or WAL bloat",
          "is_bot": false,
          "headline": "feat(locks): per-database contention timeline (lock doctor time-series)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-02T11:34:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2e322ecf6a35a5e4848a8a1e14eda94af86fb60",
          "body": "Rewrite hero and README around the core thesis: production distributed\nSQLite (D1/Turso/LiteFS) has no ops tooling, and Litescope fills that gap.\nAdd an explicit free-vs-paid boundary — software and every feature are free\nand self-hostable forever; only the hosted dashboard is paid.",
          "is_bot": false,
          "headline": "docs: reposition as the ops layer for production SQLite",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T11:06:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1969f73345ad1bad078c779a2810ba065300908",
          "body": null,
          "is_bot": false,
          "headline": "docs(roadmap): clarify next-up item, fold shipped work into summary",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T10:55:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9a103a346d04a6e6f5ada9d08ac9e983443445c",
          "body": null,
          "is_bot": false,
          "headline": "docs(roadmap): mark reversible-write MCP contract shipped",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T10:54:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b1f1a7ff2a7e627b19fc8e6e885611d5fc9f7b2",
          "body": "The subscription watcher reused the schema/dictionary trigger (any file-mtime\nbump) for health/locks too. That's wrong on both ends: a busy database fires\nan \"updated\" notification on every single write even when severity never\nchanges, while a database that goes silent — the exact case heartbeat\nst\n[…]\ne on the next manual read.\n\nAlso lets litescope://health/{source} take a ?stale_after=<duration> query\nparam so the same check from `litescope health --stale-after` is reachable\nper-resource over MCP.",
          "is_bot": false,
          "headline": "fix(mcp): notify health/locks resources on state change, not raw writes",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T10:33:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3e794f97641832193fa6cc02356f4c83fa23620",
          "body": "Add litescope://health/{source} and litescope://locks/{source} resource\ntemplates alongside the existing schema/dictionary pair. Unlike those two,\nthey're computed fresh on every read rather than cached, and ride the\nexisting file-mtime watcher so agents that subscribe get pushed updates\nwithout polling — MCP resources now cover more than schema changes.\n\nRefactors the litescope_health tool's remote/local branching into a shared\ninspectHealth() helper reused by the new resource.",
          "is_bot": false,
          "headline": "feat(mcp): live health/locks resources, subscribable",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T10:29:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e4933ae8e3f4b2a4346449d474aedc363962d9c",
          "body": "Flags databases whose file (or WAL) hasn't been written to within a\nconfigurable window — a dead-man's-switch for apps that quietly stopped\nreporting, distinct from corruption/bloat checks since SQLite is a file\nthat server-monitoring tools never see go quiet.\n\nWired into `litescope health --stale-after` and `litescope fleet health\n--stale-after`, disabled by default.",
          "is_bot": false,
          "headline": "feat(health): heartbeat staleness detection (--stale-after)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T10:23:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37a19ff7ee8b5f9f9d38ca48197dc4e776a8d804",
          "body": "Add the roadmap's automatic-corruption-recovery moat: a .recover-style\npipeline that works without cgo. modernc.org/sqlite exposes no raw b-tree\naccess, so recovery replays the schema from sqlite_master into a fresh\ndatabase, then copies every row it can still read out of each table by\nbisecting row\n[…]\ne.\n\nWires as 'litescope salvage <db> [--output out.db]' and the\nlitescope_salvage MCP write tool. Complements fleet.Recover (restore from a\nhealthy backup): this is the fallback when no backup exists.",
          "is_bot": false,
          "headline": "feat(salvage): pure-Go corruption recovery pipeline (litescope salvage)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T10:15:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6628cebb4ae983d072c422980412e00070ee6358",
          "body": "…g advice\n\nExtend the query-log advisor beyond plain missing-index detection:\n- expr-index: flag predicates on a function of a column (lower(x), date(x))\n  that a plain index can't serve, and suggest an expression index.\n- partial-index: flag equality filters that only match a small slice of a\n  lar\n[…]\ncommend cache_size/mmap_size for large databases still\n  running SQLite's default ~2MB page cache.\n\nWire litescope_autopilot's optional queries param and CLI --queries flag\nthrough to these new rules.",
          "is_bot": false,
          "headline": "feat(advisor): expression/partial/covering index and cache-size tunin…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T10:05:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4fdc8e6cf64327063b5f77b840018b01c9fcee0c",
          "body": "Add litescope_write_undo tool and rewind_token binding writes to their\npre-write snapshot, plus a blast_radius_diff (dry-run and post-apply)\nshowing the exact schema+data change a write produces.",
          "is_bot": false,
          "headline": "feat(mcp): reversible-write undo + blast-radius diff for guarded writes",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T09:55:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c786b9dcfb0804e5202f9bb8fdee33dbcaf4e330",
          "body": "…USY capture\n\nlocks --live/--watch and the dashboard's live probe now record every\nlock observation (state, wait time, holder PID/command) to the shared\nhistory store instead of just printing it. Surfaced as a new\n/api/locks/history endpoint and a timeline in the lock doctor panel.\n\nUnlike Postgres/\n[…]\n\npath — no sampling gap.\n\nAlso trims ROADMAP.md: Shipped section condensed to a scannable\ncapability list, and Phase H reprioritized with the reversible-write\nMCP contract pulled forward from Phase J.",
          "is_bot": false,
          "headline": "feat(locks): per-database contention timeline — event-driven SQLITE_B…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T09:42:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4f6b47c91d0aa424db0eec7463b8e7a998a2a94b",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.7",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T09:27:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2651504fbf0cffed4679170487489f50fbea90f",
          "body": "Surfaces the last unexposed file-superpower moat in the dashboard: a\nTime Travel view shows the 30-day restore window for D1 databases and\nlets the operator rewind to any point in it. Filtered to d1:// sources\nonly (local/Turso have no continuous history). Same SetXxx + /api/xxx\n+ capability-gated panel pattern as lock doctor/autopilot/backups.\n\nAlso updates ROADMAP.md's dashboard-surfacing section, which had\nfallen behind the autopilot and backup panels shipped earlier.",
          "is_bot": false,
          "headline": "feat(dashboard): D1 Time Travel panel — rewind to any point in 30 days",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-07-01T09:17:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97f27f9159ae2817ccb117d8e877287fb46fbc60",
          "body": "…n fleet-scale ops\n\n- Renumber phases to a contiguous A-J order (was G/I/H/J scrambled)\n- Phase I: mark the Enterprise hosted backend (auth, billing, metadata push\n  ingestion, overview) as live; alerting/heartbeat/assertions remain ahead\n- Compress Phase J: lead with reversible writes, demote side-\n[…]\nion, online schema\n  change, replication/DR health) and Phase L (cost intelligence, compliance\n  posture, signed attestation) — the fleet/enterprise revenue frontier\n- Tone down marketing superlatives",
          "is_bot": false,
          "headline": "docs(roadmap): renumber phases, sync hosted backend status, refocus o…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-29T00:26:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3ba766ae791511fc7248ed1626aa9ba40b4e48ce",
          "body": "Add the agent-era strategic frontier: reversible-write MCP contract, fleet\nops for agent memory, provenance time-travel memory, lock doctor as a live\nMCP resource, plus gap-closers (sqlite-vec awareness, query ergonomics,\nsnapshot branch/merge framing, shareable results, session insight memo).\n\nMulti-engine support is explicitly recorded as deliberately not committed —\ndepth on SQLite physics over breadth, still under consideration.",
          "is_bot": false,
          "headline": "docs(roadmap): Phase J — agent-native operations",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-29T00:16:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "851841db3eddd8ec84cbcd587f311ac83df00a0a",
          "body": "Apply the redrawn carrot (favicon + in-page marks) to the docs page and the\nserve dashboard, matching the landing — consistent across all surfaces.",
          "is_bot": false,
          "headline": "design: propagate clearer carrot mark to docs page + local dashboard",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-29T00:09:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ca162010539c42ccc86df266cfe2731c7f23b78",
          "body": "Replace the landing's one-off footer (inline links + AGPL paragraph) with\nthe shared CRODE-family footer: brand + tagline, Product/Open source/Reach us\ncolumns, and a bottom bar (copyright + tagline) — identical structure to\ncrode.net and crovi.crode.net.\n\nRedraw the carrot mark (favicon + nav + footer) so it reads as a carrot, not\na rabbit, at small sizes: elongated tapering body filling the frame with a\ncompact leaf tuft instead of two ear-like side leaves.",
          "is_bot": false,
          "headline": "design(site): CRODE-family footer + clearer carrot mark",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-29T00:07:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18b81541ae75d5415cca147967d12266408616b2",
          "body": "Bring the docs page and the serve dashboard onto the landing's brand system\n(monochrome accent + gold, Inter/JetBrains Mono, carrot mark, light/dark),\nand fix dark-mode contrast regressions on the landing.\n\nDashboard (internal/dashboard): remap tokens to the brand palette —\nmonochrome near-white/nea\n[…]\nt colors. The 'free' tier badges used a low-contrast slate that\nwashed out in dark mode, and the comparison '✗' marks/borders used hardcoded\ndark values invisible in dark mode — both made theme-aware.",
          "is_bot": false,
          "headline": "design: unify docs + dashboard onto litescope.crode.net brand",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T12:37:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6ad1cd063c5131d4fcc80d62122838ddf58219e2",
          "body": "Two more CLI moats reach the dashboard:\n\nBackups (file-superpower): a new Backups view lists a database's\npoint-in-time snapshots and lets the operator take one (optionally\nlabeled) or restore from one. Restore overwrites the live file but takes\na safety snapshot first; the restore path is validated\n[…]\nThe plan reports how many observed queries informed the advice.\n\nSame SetXxx + /api/xxx + capability-gated panel pattern as lock doctor.\nBackups and autopilot are local-only; remote DSNs are rejected.",
          "is_bot": false,
          "headline": "feat(dashboard): backup panel + query-driven autopilot advice",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T11:58:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "954b1c371d9e0ffa052fcd955f898e2775649564",
          "body": "… plan\n\nSurface the autopilot moat in the dashboard alongside lock doctor: a new\nAutopilot view shows the maintenance and indexing actions autopilot would\ntake (ANALYZE, optimize, VACUUM, missing FK indexes, redundant-index\ncleanup), each with its risk class and plain-language reason. Read-only —\napplying remains a deliberate CLI action that snapshots first.\n\nFollows the existing SetXxx + /api/xxx + capability-gated panel pattern.\nLocal-only; remote DSNs are rejected.",
          "is_bot": false,
          "headline": "feat(dashboard): DBA autopilot panel — read-only maintenance/indexing…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T11:49:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aacceea6b746b6840f70c477d1479c1e8a301188",
          "body": "… as shipped",
          "is_bot": false,
          "headline": "docs(roadmap): mark dashboard panel restyle and fleet-health timeline…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T11:45:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "839ebcda9e75c2650a3859d0983fdd2d5771d711",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.6",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T08:25:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ce5a86ace60e76cd39ff1d0958ad03f66d69c32",
          "body": "Add a time-axis monitoring dimension to the dashboard, following the\nstandard monitoring-tool pattern (sample -> persist -> range query):\n\n- internal/dashboard/history.go: a SQLite-backed ring-buffer store that\n  records fleet health/size snapshots. The monitoring history of a SQLite\n  tool is itsel\n[…]\no: open the store under the user cache dir (litescope/history.db).\n- dashboard UI: per-KPI sparklines and a stacked ok/warning/critical\n  'fleet health over time' timeline, both light and dark themed.",
          "is_bot": false,
          "headline": "feat(dashboard): fleet-health timeline with persistent history",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T08:19:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71e4b36e2501f23cf2c2b808300cca3da93cb04e",
          "body": "Restyle Data/Schema/Diff/Lock-doctor views to match the app-shell:\n- collapse rounded 6-16px radii to the shell's sharp var(--r) (3px)\n- replace hardcoded diff/panel hex colors (#4ec9b0, #161b22, ...) with\n  status/theme variables so the light theme renders correctly\n- map legacy accent rgba() literals to the accent theme variables",
          "is_bot": false,
          "headline": "feat(dashboard): unify secondary views to sharp console aesthetic",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T08:13:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1491c74787f66a774380113e459eda6221f38309",
          "body": null,
          "is_bot": false,
          "headline": "docs(readme): add Glama score badge",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T07:58:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "888c384934ccd08e9d7f199a984eb34f9d38601e",
          "body": "…k, locks, autopilot)\n\nCompletes structured-output coverage so every tool documents its result\nshape — improves agent ergonomics and MCP tool-definition quality\nscoring. Loose schemas (additionalProperties open) matching each\nhandler's actual output keys.",
          "is_bot": false,
          "headline": "feat(mcp): declare outputSchema on all read tools (migrate_diff, chec…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T07:52:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cba03586282216e0b8f45f721827694836ae004d",
          "body": "A nil Go slice marshals to JSON null, but the MCP spec requires\nresources/list to return an array. Spec-compliant clients (e.g. Glama's\nSDK) reject null with 'expected array' and drop the connection, failing\nthe server build/inspection. Return an empty slice when no concrete\nsource is bound, and tighten the regression test to require an array.",
          "is_bot": false,
          "headline": "fix(mcp): resources/list returns [] not null when no source is bound",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T07:42:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96b70daf1f155e3937ddc1072b5e29f5403becd6",
          "body": "…items\n\n- glama.json (maintainers: croc100) so Glama can verify ownership and\n  drop the 'No glama.json' quality-checklist miss.\n- ROADMAP: add the two remaining dashboard-redesign steps (panel restyle\n  onto the new tokens, and a health-history time dimension for true\n  monitoring).",
          "is_bot": false,
          "headline": "chore(glama): add glama.json to claim MCP listing; roadmap dashboard …",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T07:28:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8da69a207f4e01f6ed77e8fafe7e8f1a853f880",
          "body": "Replace the single-scroll, neon-on-black hacker aesthetic with an app\nshell built for at-a-glance fleet monitoring:\n\n- Left sidebar nav + sticky top bar; client-side view routing (Fleet,\n  Lock doctor, Schema, Diff, Data), nav items gated by capability.\n- Dual-mode design tokens (dark default + ligh\n[…]\nerity accent bars.\n- Status-only color (green/amber/red); accent reserved for interaction.\n\nExisting panels keep their markup/IDs and JS; they're relocated into\nrouted views and will be restyled next.",
          "is_bot": false,
          "headline": "feat(dashboard): redesign as dense pro monitoring console (app shell)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T07:22:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5084ab6e18c534830471c21914ab511db8e75315",
          "body": "…gnosis\n\nSurface the lock doctor moat (static PRAGMA diagnosis + live write-lock\nprobe with file holders) in the hosted dashboard, the paying screen. New\n/api/locks endpoint backed by SetLockDoctor, gated by the 'locks'\ncapability, with a panel that shows the verdict, live lock state, and each\nfinding's exact PRAGMA/DSN fix.",
          "is_bot": false,
          "headline": "feat(dashboard): lock doctor panel — surface 'database is locked' dia…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T07:03:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "257440d06167c1be181a613bcadd2e13e310f3b5",
          "body": "…pth + dashboard surfacing",
          "is_bot": false,
          "headline": "docs: roadmap — Streamable HTTP shipped; reframe Phase I as SQLite-de…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-28T06:57:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a56e27bb4591f262aec4dab6f91757dff5236db8",
          "body": "- LITESCOPE_CLOUD_URL now app.litescope.crode.net (custom domain live)\n- onboarding copy reflects the email 6-digit code login (was magic link)",
          "is_bot": false,
          "headline": "docs: hosted dashboard — custom domain URL + OTP login copy",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T22:09:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e9b5b0aec1c77e31a5eb5c88da361926918a3c9",
          "body": "- --http-token (or LITESCOPE_MCP_TOKEN) requires Authorization: Bearer on\n  every HTTP request; constant-time compare; 401 on missing/wrong\n- --http-origin allowlists browser Origins for DNS-rebinding protection;\n  localhost always allowed; non-browser clients (no Origin) allowed; 403\n  on a disallowed Origin\n- warn on startup when --http runs without a token (open endpoint)\n- http_test.go: token enforcement + origin allow/reject",
          "is_bot": false,
          "headline": "feat(mcp): auth for Streamable HTTP — Bearer token + Origin allowlist",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T21:59:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "486cec1e82c21562b2a81c741f8ccda1df045e33",
          "body": "- litescope mcp --http :ADDR serves the Streamable HTTP transport for\n  hosted/remote/multi-client use instead of stdio\n- single endpoint (default /mcp): POST one JSON-RPC message (request ->\n  response body, notification -> 202); GET opens an SSE stream for\n  server notifications; DELETE terminates\n[…]\n on the POST body while logging/resource notifications go to the session\n  SSE stream; newServer() shared by both transports\n- http_test.go: session lifecycle, routing, 202 notifications, SSE delivery",
          "is_bot": false,
          "headline": "feat(mcp): Streamable HTTP transport (MCP 2025-06-18)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T21:56:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "59fb38f49df888e32711a49a6347d3ad35bf6fe2",
          "body": null,
          "is_bot": false,
          "headline": "docs: roadmap — MCP 2025-06-18 shipped; add Phase I (SQLite supremacy)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T21:51:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "faa50b6ee65749651b7854547fc923cb09cf0f83",
          "body": "…Schemas\n\n- completion/complete: suggest bound default source + account D1 DSNs for\n  source/old/new arguments\n- resources/subscribe + unsubscribe with an mtime watcher that emits\n  notifications/resources/updated for local-file-backed resources\n- logging: emit notifications/message per tool call (d\n[…]\nngerprint/fleet_health/d1_list/\n  snapshot_list\n- make all writes thread-safe (mutex) so the watcher and request loop can\n  emit concurrently\n- advertise resources.subscribe + completions capabilities",
          "is_bot": false,
          "headline": "feat(mcp): completions, resource subscribe, log emission, more output…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T21:39:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "27d3f478b6638ab1a0e8948ddb8d7b4b91cc650e",
          "body": "- Bump protocolVersion 2024-11-05 -> 2025-06-18\n- Emit structuredContent on every tool result (parsed from JSON output)\n  so agents consume results without re-parsing the text block\n- Declare outputSchema for core read tools (health/schema/diff/\n  migrate_plan/query)\n- Advertise logging capability and accept logging/setLevel\n- Release 0.6.3",
          "is_bot": false,
          "headline": "feat(mcp): upgrade to protocol 2025-06-18 with structured output",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T21:29:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99e3c9a665a05fd2408a83c2b46b78ee873035bb",
          "body": null,
          "is_bot": false,
          "headline": "chore: release 0.6.2 (MCP tool annotations)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T21:18:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d15fbe59ff03eeb6c2164fa84ddaf2d9c6a72a9",
          "body": "…World hints + titles)\n\nExposes MCP behavioral hints on every tool so clients can reason about safety\nbefore calling — read-only diagnostics vs guarded writes vs data-replacing\noperations. Adds a coverage test enforcing every tool is annotated and that\ndestructive tools are flagged.",
          "is_bot": false,
          "headline": "feat(mcp): add tool annotations (readOnly/destructive/idempotent/open…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T21:16:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59e586330aad75b93f96ce9d051db168e59a8f1a",
          "body": null,
          "is_bot": false,
          "headline": "build: add Dockerfile for MCP server (Glama introspection checks)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T21:06:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5d8b61c1fdac5284447519e13e4f530a81da0e2",
          "body": null,
          "is_bot": false,
          "headline": "fix: shorten server.json description to <=100 chars for MCP registry",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T20:57:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7d3e1803573ec1e83f196a3128e7adecd03ac71",
          "body": null,
          "is_bot": false,
          "headline": "chore: add mcpName + server.json for MCP registry (0.6.1)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T20:52:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f046139e8f895fd5dd5463b67bc1e7b396ff1617",
          "body": null,
          "is_bot": false,
          "headline": "docs: mark npm publish complete (litescope on npm)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T20:20:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7c2e0ac367ae0ed94fc8a6d4cc91e869118e990",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump npm wrapper to 0.6.0 for release",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T20:06:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18bcb15fd6e239997c141007f8a5edef4d859175",
          "body": "- advisor: full-scan findings now infer WHERE/JOIN predicate columns and\n  emit a runnable CREATE INDEX (equality-first composite ordering, skips\n  already-indexed leading columns) instead of guidance-only text\n- autopilot: applies the inferred index under --aggressive, snapshotting first\n- snapshot schedule: unattended interval snapshots with retention for a single\n  DB or a --fleet config; --once for cron/systemd, local/Turso D1 Time Travel parity",
          "is_bot": false,
          "headline": "feat: EXPLAIN-driven autopilot index inference + scheduled snapshots",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T20:04:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d68f0e65ce0dc052c70c1bf6e5e801ea325e2d30",
          "body": "…; grayscale carrot mark",
          "is_bot": false,
          "headline": "redesign: grayscale theme matching crode.net + light/dark mode toggle…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T19:10:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "907e4270c358f0f2f3e5241d5090ec6c22305fc2",
          "body": null,
          "is_bot": false,
          "headline": "design: replace logo + favicon with carrot mark (CRODE family)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T08:34:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4d5219a8a5d2f695ab92ed926617ab80aa9eb30",
          "body": null,
          "is_bot": false,
          "headline": "feat: link footer back to crode.net hub",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T08:28:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d048053c5ac264c05038928ec4825fe257f8e192",
          "body": "…out surveillance)\n\nForeground the company throughline across the LiteScope site: metadata-only,\ndry-run-by-default, and verifiable-by-design. New 'Part of CRODE' section with\nthree theme cards, nav link, hero subline, and footer family note.",
          "is_bot": false,
          "headline": "site: Phase A — CRODE brand theme integration (operational power with…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T07:38:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f4f674be1f52d3f49b34fac1cef3899cefb98e4",
          "body": "…ferentiation)",
          "is_bot": false,
          "headline": "roadmap: Phase H — fleet observability & alerting (SQLite-physics dif…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T07:30:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8395fcd40b228bc12baa940e4aab938b7994f479",
          "body": null,
          "is_bot": false,
          "headline": "site: add Sign in nav link to hosted dashboard",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T07:26:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "795fa000d54230aea48672ecfd8df06dfd4971e1",
          "body": "Document the customer journey the docs were missing: subscribe → welcome\nemail (sign-in link + push key) → sign in → connect the CLI with\nLITESCOPE_CLOUD_URL/KEY and 'litescope push' on a cron/timer. Adds a\npush flag reference and a sidebar entry. Also surfaces the npx install\ntab added earlier.",
          "is_bot": false,
          "headline": "docs: hosted dashboard onboarding journey + push reference",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T02:03:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0cd01ef0a7a3c1d2faf7e8296b50055c95f95b4",
          "body": "Add npm/ package: a zero-dependency installer that fetches the matching\nGitHub release binary for the platform (postinstall, with lazy fallback\non first run) and a launcher that forwards args + exit codes. Enables\n'npx litescope …' and 'npm i -g litescope' for JS and wrangler users.\nVerified end-to-end against the live v0.5.0 release (download, cache,\nrun). Publishing to npm is the only remaining external step.\n\nDocument npx in the README and site install tabs.",
          "is_bot": false,
          "headline": "feat(dist): npm wrapper — npx litescope for JS/wrangler users",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-27T01:57:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa68cf3d7fc8088f6e57a0372be6d0398005241e",
          "body": "Add a composite GitHub Action (action.yml): 'uses: croc100/Litescope@v1'\ninstalls the matching release binary, runs any Litescope command in CI,\nwrites a job summary, posts a sticky blast-radius comment on the PR\n(comment: true), and fails the check when Litescope flags findings.\nInstall logic verif\n[…]\n v0.5.0 release; example lint+diff\nworkflow in examples/github-actions/.\n\nAdd COMMERCIAL.md documenting the AGPL-3.0 open core + commercial\nexception/support dual-license path, linked from the README.",
          "is_bot": false,
          "headline": "feat(ci): Phase G — GitHub Action + commercial licensing doc",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:57:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0ca26b0814f7bdcb0f4c36cd0f67312162db8ed8",
          "body": "README + site + docs reference now cover the features shipped since the\nlast docs pass: MCP write safety (dry-run by default, impact preview,\nauto-snapshot, lock remediation), snapshot/restore, autopilot, locks\n(static + live), MCP prompts/resources + query token budgeting, and the\ndashboard visual diff panel.\n\nWire the hosted-dashboard pricing to the live Lemon Squeezy checkout\n(both tiers selectable at one URL) and switch the CTA from early-access\nemail to Subscribe.",
          "is_bot": false,
          "headline": "docs: reflect shipped moats + wire hosted-dashboard checkout",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:49:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4bdd9efa06abdf9b81bd346bc1d85ddbfa09a76",
          "body": "…engine\n\nAdd a Diff panel to the local dashboard: pick any two databases in the\nfleet and review what changes before applying — added/removed tables and\ncolumns, type changes, index changes, and row-count deltas. New\n/api/diff endpoint + DiffFn provider + 'diff' capability; the frontend\nrenders cura\n[…]\nACHes the old database and compares by primary key. Adds the first\ntests for the diff package.\n\nData browsing (browser, pagination, query builder, ERD) already shipped\nearlier; this completes Phase F.",
          "is_bot": false,
          "headline": "feat(serve): Phase F — visual schema/data diff panel + fix data diff …",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:40:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ea20055a92e9adfa4c8176fa0974d5fd863f2e2",
          "body": "…dgeting)\n\nExpand the MCP server beyond Tools to the rest of the spec:\n\n- Prompts: canned workflows (diagnose_locked_database, review_migration,\n  safe_optimize, health_checkup) that chain Litescope's own tools into a\n  safe, concrete plan. prompts/list + prompts/get.\n- Resources: schema and a data \n[…]\n_rows (cap) and columns\n  (projection), reporting total_rows + truncated so large results never\n  silently blow the agent's context window.\n\ninitialize now advertises prompts + resources capabilities.",
          "is_bot": false,
          "headline": "feat(mcp): Phase E — MCP protocol depth (Prompts, Resources, token bu…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:32:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "92a24c93e6d76c1556a1d068bf405e61c5ba8973",
          "body": "New internal/autopilot package derives safe maintenance/optimization\nactions for a SQLite database: ANALYZE, PRAGMA optimize, auto-add\nmissing foreign-key indexes (safe, additive), and VACUUM +\nredundant-index cleanup (risky, gated behind --aggressive). Every action\ncarries a plain-language reason.\n\n[…]\neet to run across a whole fleet.\nMCP parity: litescope_autopilot (apply gated on --allow-writes).\n\nCompletes the third moat. All three moats (lock doctor, write safety,\nbackup, autopilot) now shipped.",
          "is_bot": false,
          "headline": "feat(autopilot): Phase D — self-driving DBA optimization",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:25:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d12dd104acfc08fddd8eaf660a5a414ab17bc4d",
          "body": "…Lite\n\nNew internal/snapshot package: consistent VACUUM INTO snapshots stored in\na sibling .litescope-snapshots/ directory, with list, --label, --keep N\nretention, and collision-safe naming. Restore is integrity-checked and\ntakes an automatic pre-restore safety snapshot before overwriting.\n\nCLI: lit\n[…]\ns with no snapshot. MCP parity:\nlitescope_snapshot, litescope_restore, litescope_snapshot_list.\n\nBrings local (and Turso) SQLite the same 'did you back up?' safety net\nthat D1 has through Time Travel.",
          "is_bot": false,
          "headline": "feat(snapshot): Phase C — point-in-time backup & restore for local SQ…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:21:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b8de400bed67e619b541e7abf2416effb9d0b3f1",
          "body": "…, auto-snapshot, lock remediation)\n\nlitescope_query_write and litescope_migrate_apply are now dry-run by\ndefault. New internal/safewrite package measures exact rows-affected\nblast radius inside a rolled-back transaction, auto-snapshots the\ndatabase before any apply=true write (via migrate.Apply), and converts\ndatabase-is-locked failures into structured lock-doctor remediation the\nagent can act on. Remote D1/Turso fall back to direct execution and\nrequire explicit apply=true.",
          "is_bot": false,
          "headline": "feat(mcp): Phase B — write safety guardrails (dry-run, impact preview…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:13:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "656909561348de4e11f6bd034977dc5411192797",
          "body": "… is next",
          "is_bot": false,
          "headline": "docs(roadmap): fold shipped live lock detection into Shipped; Phase B…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:07:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73577c07aae014c4c00d6680c58fed0207925ed9",
          "body": "Phase A. Add live lock-state probing to the lock doctor: a fresh connection\nattempts BEGIN IMMEDIATE with a short busy_timeout to detect whether a writer\ncurrently holds the lock (FREE / LOCKED), and lsof identifies which processes\nhave the database file open. This is the real 'database is locked' d\n[…]\n(path, timeout) — one-shot live state + holders + remediation hint\n- locks.Watch(...) — stream state changes\n- CLI: litescope locks --live / --watch / --interval\n- MCP: litescope_locks gains live=true",
          "is_bot": false,
          "headline": "feat(locks): live lock detection — probe current holder, --watch",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T21:06:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb3866515da7bf90b536e3ec361e398cebecb5c2",
          "body": "…completion + MCP write-safety phases\n\nMove all shipped work (Phase 1/2/2.5, lock doctor, bisect) into a single\nShipped section. Reframe identity as SQLite-first with three moats (file\nsuperpowers, DBA autopilot, lock doctor). Add forward phases:\n- A: lock doctor live detection\n- B: MCP write safety\n[…]\nreview, auto-snapshot, error remediation)\n- C: backup/PITR for local + Turso\n- D: autopilot\n- E: MCP protocol depth (Resources/Prompts/token budgeting)\n- F: exploration UI\n- G: platform & distribution",
          "is_bot": false,
          "headline": "docs(roadmap): SQLite-first restructure — collapse shipped, add moat-…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T20:59:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "edca3e484630d36366949feeb4cc67d1aaa6597a",
          "body": "Add internal/locks package diagnosing the most common SQLite production\nfailure: writer starvation and \"database is locked\". Inspects journal\nmode, busy_timeout, locking mode, and WAL bloat for local files, with\nprovider-specific guidance for D1 and Turso. Each finding ships the exact\nPRAGMA or DSN fix.\n\nExposed as CLI 'litescope locks <db>' and MCP tool 'litescope_locks'.",
          "is_bot": false,
          "headline": "feat(locks): add lock doctor — diagnose database-is-locked / SQLITE_BUSY",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T20:53:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea65c76bd9ad3df13e78b75968cf249a8aff5ab2",
          "body": "Lead with MCP config + D1 conversation examples, then D1 CLI ops\n(rewind, pull/push, migrate, bisect), then local SQLite commands,\nthen fleet. Removes generic SQLite positioning in favor of\nCloudflare D1 + Claude MCP identity.",
          "is_bot": false,
          "headline": "docs: rewrite README as MCP-first D1 operations tool",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T17:28:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e82c35561f05374e785f8db83abc82f05343a5f",
          "body": "…_diff tools\n\n- litescope_rewind (--allow-writes): restore D1 to a point in time via\n  Time Travel; accepts \"2h ago\", \"3d ago\", RFC 3339, \"yesterday\", \"now\"\n- litescope_d1_pull (--allow-writes): download D1 database to a local\n  SQLite file; streams progress per table\n- litescope_migrate_diff (read-only): diff two sources and return the\n  migration SQL without blast-radius analysis; pairs with migrate_apply",
          "is_bot": false,
          "headline": "feat(mcp): add litescope_rewind, litescope_d1_pull, litescope_migrate…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T17:26:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0aa2914bebff8d3558699779ed75498cb37dfb2",
          "body": null,
          "is_bot": false,
          "headline": "site: D1+MCP-first redesign — hero, nav, D1 section, MCP section",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T17:16:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dcad2820c9c678f48a4135f1ac1ac9c06f67e7a",
          "body": "…ifecycle (#11)\n\n* feat: Phase 2 D1-native — rewind, MCP write tools, D1 lifecycle\n\n- litescope rewind d1://DB_ID --to <time>: restore a D1 database to any\n  point in the last 30 days via Cloudflare Time Travel API. Accepts\n  relative durations (2h ago, 3d ago, yesterday) and RFC 3339 timestamps.\n\n-\n[…]\n (default 1 min). Verifies --good and --bad boundaries before bisecting.\n  Leaves DB at --bad state for inspection; prints the restore command.\n\n--expect: \"any\" | \"none\" | \"gt:N\" | \"lt:N\" | \"eq:VALUE\"",
          "is_bot": false,
          "headline": "feat: Phase 2 D1-native — rewind (Time Travel), MCP write tools, D1 l…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T17:11:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3e1fb9bd218a6a6908661eda0a9e33d4c7afc3b",
          "body": "… (#10)\n\nReposition Litescope as the MCP-first operations tool for Cloudflare D1.\n\n- connector/d1: support short DSN forms (d1://DB_ID, d1://ACCOUNT/DB_ID)\n  resolving credentials from CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID;\n  add ListD1Databases() to enumerate all D1 databases in an account\n-\n[…]\nitescope_query (read-only SQL on any source) and litescope_d1_list\n  (list all D1 databases); remove Pro gate from fleet tools\n- ROADMAP: rewrite around D1+MCP identity and Cloudflare partnership path",
          "is_bot": false,
          "headline": "feat: D1+MCP first — env-var auth, litescope_query, litescope_d1_list…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-26T16:40:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dd763ead781e5893aaad15e467b3d3f0941f8e7a",
          "body": "Bring back the paid offering now that LS KYC is done: the hosted dashboard\nas Hosted $49/mo (up to 25 DBs) and Scale $149/mo (up to 250), with\n'Get early access' mailto CTAs (the hosted product isn't live yet, so no\nBuy button — swap in the Lemon Squeezy checkout URL once the LS live\nproduct exists). CLI, local dashboard, and self-hosting stay free forever.",
          "is_bot": false,
          "headline": "site: add hosted-dashboard pricing (early access)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-25T08:54:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd28a1df530adfeebf4a242a935ba25c89a35258",
          "body": "The croc100.github.io/Litescope URL is deprecated; use the live Cloudflare\nPages site, matching the repo's About link.",
          "is_bot": false,
          "headline": "docs: point README Website link to litescope-site.pages.dev",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-25T08:46:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76175aefd1e09e874c6c0dd64cfb5122d63c269d",
          "body": "Replace croc100100@gmail.com and croc100@crode.net across the README, CLI\nlicense command, site, docs, legal pages, and wails.json. Third-party emails\nin dependency files (Wails runtime, font OFL license) are left untouched.",
          "is_bot": false,
          "headline": "Change all contact emails to dl_litescope@crode.net",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-25T08:45:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc3366d3acf58c33b107b4de6d7da233041c8d7c",
          "body": "The CLI is now free and open source (AGPL-3.0), so the site reflects it:\n- Replace the three-tier Free/Pro/Enterprise pricing + comparison table +\n  Lemon Squeezy buy buttons with a 'whole toolchain is free, forever'\n  section and a single planned, demand-gated hosted dashboard (metadata-only\n  Clou\n[…]\ndist URLs at the now-public main repo.\n\ni18n-dict.js keeps orphaned ko/zh/ja pricing entries (never looked up since\nthe English keys changed) — those sections fall back to English until\nre-translated.",
          "is_bot": false,
          "headline": "site: drop Pro/Enterprise pricing, lead with free & open source",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-25T08:42:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fe342699749d0605e820eb0b896a52bceab16558",
          "body": "go list ./... aborts on the gui package's missing embed (frontend/dist) and\nprints nothing, leaving the package list empty. Name the buildable trees\ndirectly instead.",
          "is_bot": false,
          "headline": "ci: target cmd/ and internal/ explicitly",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-25T08:31:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4ce050e5aecc346bac06e92abd99502508539f0",
          "body": "The gui package embeds gui/frontend/dist (a Wails build artifact, gitignored\nand absent in CI), so 'go build ./...' fails there. Resolve the package list\nexcluding /gui; the desktop app is built separately at release.",
          "is_bot": false,
          "headline": "ci: scope to CLI + library packages, skip the Wails GUI",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-25T08:29:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c85cd4696015f54b8f66c9b95562ce002b22d50f",
          "body": "The repo is public now, so GitHub Actions minutes are free — bring back a\nlean CI (go vet + go test + go build) pinned to the module's Go version so\ncontributors see green checks.",
          "is_bot": false,
          "headline": "ci: restore test/vet/build workflow on push and PR",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-25T08:28:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "646953fc44736a89ffda761804c1efff3b7aaaec",
          "body": "Litescope is now fully open source (AGPL-3.0): the CLI is free for everyone\nwith no license key. Every previously Pro-gated feature — migrate apply,\nfull fleet ops (converge/recover/migrate/discover), batch check, monitor\nwatch with webhooks/remote targets, the >10-database fleet — is unlocked.\n\n- l\n[…]\nent AGPL + commercial-license path.\n- ROADMAP.md: moved into the repo (was in the public dist repo).\n- goreleaser: publish releases to croc100/Litescope (repo is now public),\n  homebrew-tap unchanged.",
          "is_bot": false,
          "headline": "Relicense to AGPL-3.0 and make the entire CLI free",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-25T08:26:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dae991a59e4601d8fe162c7083059d1607eff909",
          "body": "Make 'migrate plan --schema' CI-native, closing the Atlas Cloud-style\nmigration-linting gap for declarative schema-as-code:\n\n  --exit-code            exit non-zero if the database has drifted at all\n  --fail-on <severity>   exit non-zero when the reconciliation plan contains\n                        \n[…]\nd silences\ncobra usage on failure so CI logs stay clean. No HCL/parser work: FromSQL\nalready executes against a real SQLite engine, so the declarative schema is\nexactly as expressive as SQLite itself.",
          "is_bot": false,
          "headline": "feat(migrate): CI drift gate + severity lint for declarative plan",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-23T02:05:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ceec7bf2873ea8a63c2907aab99c62b8ab16f0a",
          "body": "Add a point-and-click query builder (⚒ Build) to the read-only data\nconsole: pick a table, toggle SELECT columns, add AND-joined WHERE\nconditions (=, !=, <, <=, >, >=, LIKE, IS NULL, IS NOT NULL), choose\nORDER BY + direction, and a LIMIT. It composes read-only SQL into the\neditor and runs it, so the generated query stays visible and editable.\nColumns come from /api/schema; identifiers are quoted and string values\nescaped. Pure client-side, no new backend.",
          "is_bot": false,
          "headline": "feat(serve): visual query builder in the data panel",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-23T02:00:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cf98799bfccea863901bfeaa20828037c22c698",
          "body": "Clicking a table now opens a dedicated browse view backed by a new\n/api/browse endpoint: server-side pagination (First/Prev/Next, selectable\npage size up to 1000) with the total row count, and click-to-sort column\nheaders cycling asc → desc → off. The table and sort column are validated\nagainst the live schema so neither can be used for SQL injection, and the\npage size is capped server-side. Free-form SQL in the console leaves\nbrowse mode and behaves as before.",
          "is_bot": false,
          "headline": "feat(serve): paginated, sortable table browser in the data panel",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-23T01:57:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa1d97391fbb0e6ffb541f833e41ded96466a9f2",
          "body": "Overlay each database's ERD with its place in the fleet: which schema\ncluster it belongs to and how it has drifted from canonical. Drift\nclusters mark extra tables (EXTRA), added/changed columns, and ghost\nrows for tables/columns canonical has but this database is missing. A\nbanner summarizes the cl\n[…]\ndatabases\nshare the shape. Canonical databases show a reference banner.\n\nThis binds the single-DB ERD to the fleet-operations story: you see one\nschema and instantly know whether it matches the fleet.",
          "is_bot": false,
          "headline": "feat(serve): fleet fingerprint overlay on the ERD",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-23T01:03:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a10ca4802dbbec6c36f75d65a93924afb10efda",
          "body": "Add a Schema panel to litescope serve that renders a database's tables and\nforeign-key relationships as an interactive entity-relationship diagram.\nTables are draggable, the canvas pans, and the wheel zooms toward the cursor;\nselecting a table highlights its relationships. PK/FK columns and types ar\n[…]\nree embedded SVG (no build step). New /api/schema\nendpoint, gated by a 'schema' capability and wired only for local SQLite\n(remote DSNs are rejected). Backed by the existing schema.Load FK extraction.",
          "is_bot": false,
          "headline": "feat(serve): interactive ERD in the web dashboard",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-23T00:54:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "32ec7bba3c7407ffdb70fe4702055bf05876d99c",
          "body": "Close the 'query history / saved queries' parity gap (DBeaver/TablePlus/\nDatasette have it; our console had neither).\n\n- Recent: every successful query is recorded (deduped, capped at 15).\n- Saved: ★ Save bookmarks the current query.\n- Click a chip to load it into the editor; ✕ removes it.\n- Pure client-side (localStorage), no backend or new API surface.",
          "is_bot": false,
          "headline": "feat(serve): query history + saved queries in the web SQL console",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-23T00:14:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "281a9a6d1a1f8c269ea007f3eb635a72ef1948e1",
          "body": "Close the spreadsheet round-trip parity gap vs DBeaver/TablePlus/Datasette:\nimport and export now handle .xlsx alongside CSV/TSV/JSON.\n\n- importer.ImportXLSX: dependency-free reader (archive/zip + encoding/xml)\n  resolving shared strings, inline strings, booleans and numbers; cells\n  placed by A1 re\n[…]\ndetects .xlsx; export infers format from -o extension and\n  routes .xlsx (binary, requires -o). serve drag-drop accepts .xlsx too.\n- README + dashboard drop hint updated. Unit tests for both packages.",
          "is_bot": false,
          "headline": "feat(import/export): Excel .xlsx support (stdlib-only, no deps)",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-23T00:10:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "547246832a21957c4c585ec71648c7200bbbaf4b",
          "body": "…i18n)\n\nREADME: serve section + Free comparison row. Site: serve feature card,\npricing list item, and a new comparison-table row, with ko/zh/ja i18n.",
          "is_bot": false,
          "headline": "docs: document serve data browser + web SQL console (README + site + …",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-22T23:59:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "913cc9007547a5118cd80219e5edac7cf097a5db",
          "body": "Adds a \"Data\" panel to `litescope serve`: pick a fleet database, click a\ntable to preview rows, or run any read-only SQL. Closes the Datasette\n\"browse & query in the browser\" gap — free and local.\n\nSafety is enforced at the engine level (mode=ro + PRAGMA query_only=ON),\nnever by parsing the submitte\n[…]\n/api/tables?db=NAME and POST /api/query; /api/capabilities\nnow advertises `data`. Dashboard package stays transport-only — DSN\nresolution and querying are injected by the CLI (same pattern as import).",
          "is_bot": false,
          "headline": "feat(serve): read-only data browser + web SQL console in the dashboard",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-22T23:55:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "99412089ece4c7990bca59f9ee6549cc0fd0cc25",
          "body": "…ctions minutes",
          "is_bot": false,
          "headline": "chore: remove private ROADMAP (dist is SoT) and CI workflow to save A…",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-22T20:41:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1db605998df51130f7d2a9b5da5d67241cf2c28e",
          "body": "…rows, i18n (ko/zh/ja)",
          "is_bot": false,
          "headline": "docs(site): add import/export + metrics feature cards and comparison …",
          "author_name": "croc100",
          "author_login": "croc100",
          "committed_at": "2026-06-22T20:28:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 13,
      "commits_last_year": 219,
      "latest_release_at": "2026-07-14T02:11:16Z",
      "latest_release_tag": "v0.8.0",
      "releases_from_tags": false,
      "days_since_last_push": 13,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 13,
      "mean_days_between_releases": 1.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/croc100/litescope",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/croc100/litescope",
          "is_deprecated": false,
          "latest_version": "v0.8.0",
          "repository_url": "https://github.com/croc100/litescope",
          "versions_count": 21,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T02:10:48Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 13
        },
        {
          "name": "litescope",
          "exists": true,
          "license": "AGPL-3.0",
          "keywords": [
            "sqlite",
            "cloudflare",
            "d1",
            "turso",
            "mcp",
            "migration",
            "schema-diff",
            "wrangler"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/litescope",
          "is_deprecated": false,
          "latest_version": "0.8.0",
          "repository_url": "https://github.com/croc100/Litescope",
          "versions_count": 8,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2078,
          "first_published_at": "2026-06-27T20:19:56.308000Z",
          "latest_published_at": "2026-07-14T02:11:55.266000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 13
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "gui/frontend/tsconfig.json"
      ],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 164470,
      "source_files_sampled": 160,
      "oversized_source_files": 3,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod",
        "npm/package.json"
      ],
      "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",
        "npm"
      ],
      "dependencies": [
        {
          "name": "github.com/charmbracelet/lipgloss",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "github.com/wailsapp/wails/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.12.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "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": 11,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "croc100",
          "commits": 219,
          "avatar_url": "https://avatars.githubusercontent.com/u/67980944?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "33 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "8eff65541a3827277e141d390658c5d1cc9e406f",
        "ran_at": "2026-07-28T00:56:13Z",
        "aggregate_score": 2.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-14T02:11:30Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-06-26T17:11:45Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/croc100/Litescope",
    "host": "github.com",
    "name": "Litescope",
    "owner": "croc100"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 53,
      "inputs": {
        "security": 29,
        "vitality": 67,
        "community": 32,
        "governance": 54,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 67,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "commits_last_year": 219,
              "human_commit_share": 1,
              "days_since_last_push": 13,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 13 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 13
                    }
                  }
                ],
                "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": "219 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 219
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 13,
              "latest_release_tag": "v0.8.0",
              "releases_from_tags": false,
              "days_since_latest_release": 13,
              "mean_days_between_releases": 1.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 13 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 13
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "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 (AGPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "AGPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "packages": [
                "github.com/croc100/litescope",
                "litescope"
              ],
              "dependents": null,
              "ecosystems": "go, npm",
              "total_downloads": null,
              "monthly_downloads": 2078
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,078 downloads/month across go, npm",
                "points": 44.2,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2078,
                      "ecosystems": "go, npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 11,
              "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": "11/11 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 11,
                      "decided": 11
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "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": 50,
            "inputs": {
              "followers": 7,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "croc100",
              "public_repos": 33,
              "account_age_days": 2211
            },
            "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": "7 followers of croc100",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 7,
                      "login": "croc100"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "33 public repos, account ~6 yr old",
                "points": 23.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 33
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/croc100/litescope",
                "litescope"
              ],
              "ecosystems": "go, npm",
              "any_deprecated": false,
              "min_days_since_publish": 13
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "2 package(s) on go, npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 2,
                      "ecosystems": "go, npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 13 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 13
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "21 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "cli",
                "cloudflare-d1",
                "database",
                "devops",
                "golang",
                "migration",
                "monitoring",
                "schema-diff",
                "sqlite",
                "turso",
                "database-migration",
                "database-tools",
                "edge-database",
                "fleet-management",
                "mcp"
              ],
              "has_wiki": true,
              "homepage": "https://litescope.crode.net",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://litescope.crode.net",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "15 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "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": "critical",
        "name": "Security",
        "value": 29,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 29,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 2.9
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "33 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 55,
        "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": 1,
              "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": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "gui/frontend/tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "gui/frontend/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "gui/frontend/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 164470,
              "source_files_sampled": 160,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/160 source files over 60KB",
                "points": 54,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 160,
                      "oversized": 3
                    }
                  }
                ],
                "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T00:56:17.926541Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/croc100/Litescope.svg",
  "full_name": "croc100/Litescope",
  "license_state": "standard",
  "license_spdx": "AGPL-3.0"
}

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

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

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