Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-28 00:56 UTC

croc100 / Litescope

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

Go · TypeScriptAGPL-3.0★ 1 star⑂ 0 forkssince Jun 2026View on GitHub ↗

croc100/Litescope holds a health index of 53 out of 100, placing it in the Moderate band. It scores highest on Engineering Quality (76/100) and lowest on Security (29/100). It was last updated 13 days ago. A single contributor accounts for most of its recent work.

53
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

53
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

croc100Personal account
7 followers33 public repossince Jul 2020

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
Gogithub.com/croc100/litescopev0.8.0-2113 days ago
npmlitescope0.8.02,078813 days agosqlitecloudflared1tursomcpmigrationschema-diffwrangler

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

67Moderate · 22% of overall
How it's scored
28.8/36Push recency — last push 13 days ago
4.2/36Commit cadence — 6/52 weeks with commits
18/18Commit volume — 219 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year219
human_commit_share1
days_since_last_push13
active_weeks_last_year6
How it's scored
27/27Ships releases — 13 releases published
36/36Release recency — latest release 13 days ago
27/27Release cadence — a release every ~1.8 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count13
latest_release_tagv0.8.0
releases_from_tagsno
days_since_latest_release13
mean_days_between_releases1.8

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

32At risk · 18% of overall
How it's scored
0/60Stars — 1 stars
0/25Forks — 0 forks
0/15Watchers — 0 watchers
Inputs used
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (AGPL-3.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
How it's scored
44.2/80Monthly downloads — 2,078 downloads/month across go, npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesgithub.com/croc100/litescope, litescope
dependents
ecosystemsgo, npm
total_downloads
monthly_downloads2,078
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

54Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
0/46.8Issue resolution — no issues or no data
38.2/38.3PR acceptance — 11/11 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs11
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
6.5/25Owner reach — 7 followers of croc100
23.2/25Track record — 33 public repos, account ~6 yr old
Inputs used
followers7
owner_typeUser
is_verified
owner_logincroc100
public_repos33
account_age_days2,211
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 2 package(s) on go, npm
35/35Publish recency — latest publish 13 days ago
20/20Version history — 21 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesgithub.com/croc100/litescope, litescope
ecosystemsgo, npm
any_deprecatedno
min_days_since_publish13

Engineering Quality

Are baseline engineering and documentation practices in place?

76Good · 20% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

100Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://litescope.crode.net
10/10Repository description
10/10Topics — 15 topics
10/10Wiki
Inputs used
topicscli, cloudflare-d1, database, devops, golang, migration, monitoring, schema-diff, sqlite, turso, database-migration, database-tools, edge-database, fleet-management, mcp
has_wikiyes
homepagehttps://litescope.crode.net
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

29Critical · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — no data
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 33 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate2.9
Excluded from scoring (no data or not applicable): ci_tests. Remaining weights renormalized.

AI Readiness

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.

55Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 100 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
How it's scored
12.6/18One-command bootstrap — go.mod (toolchain convention, no task runner)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — gui/frontend/tsconfig.json
10/10Reproducible environment — Dockerfile, lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilesgo.sum, package-lock.json
has_dockerfileyes
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configsgui/frontend/tsconfig.json
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — Go (statically typed)
54/55Manageable file sizes — 3/160 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes164,470
source_files_sampled160
oversized_source_files3
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

1GitHub stars
1contributors
219commits, last 12 months
13days since last push
13releases
1bus factor
0open issues
Go, npmpackage ecosystems

Data collection 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

More detail

OpenSSF Scorecard 2.9 / 10
2.9aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-28 00:56 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities33 existing vulnerabilities detected
Direct dependencies 5
RegistryPackageVersion constraintManifest
Gogithub.com/charmbracelet/lipglossv1.1.0go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogithub.com/wailsapp/wails/v2v2.12.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gomodernc.org/sqlitev1.52.0go.mod
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsGo, npm.