JSON-Rohbericht maschinenlesbar
{
"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"
}