Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 21:25 UTC

opengeos / cog-tiler-wasm

Serverless Cloud Optimized GeoTIFF (COG) dynamic tiling in WebAssembly. TiTiler-style XYZ tiles, no backend, built on whitebox-wasm.

Rust · JavaScriptMIT★ 8 Sterne⑂ 0 Forksseit Juni 2026Auf GitHub ansehen ↗

opengeos/cog-tiler-wasm erreicht einen Gesundheitsindex von 54 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (71/100) ab, am schwächsten bei Community & Adoption (31/100). Zuletzt vor 6 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

54
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

54
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

3.836 Follower168 öffentliche Reposseit Apr. 2023

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

67Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 6 Tagen
2.8/36Commit-Rhythmus — 4/52 Wochen mit Commits
12.9/18Commit-Volumen — 26 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year26
human_commit_share1
days_since_last_push6
active_weeks_last_year4
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 9 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 6 Tagen
27/27Release-Rhythmus — ein Release etwa alle 4 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count9
latest_release_tagv0.3.1
releases_from_tagsnein
days_since_latest_release6
mean_days_between_releases4

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

31Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
13.7/60Stars — 8 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars8
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

56Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 5 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
38.2/38.3PR-Annahme — 22/22 entschiedene PRs gemergt
4.5/15OpenSSF Scorecard: Code-Review — Found 9/26 approved changesets -- score normalized to 3
Verwendete Eingangsdaten
merged_prs22
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
25/25Reichweite des Inhabers — 3.836 Follower von opengeos
19.6/25Kontohistorie — 168 öffentliche Repos, Kontoalter ca. 3 Jahre
Verwendete Eingangsdaten
followers3.836
owner_typeOrganization
is_verified
owner_loginopengeos
public_repos168
account_age_days1.208

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

71Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 3 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 22 out of 22 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — http://opengeos.org/cog-tiler-wasm
10/10Repository-Beschreibung
10/10Topics — 5 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsdata-science, geospatial, raster, wasm, whiteboxtools
has_wikija
homepagehttp://opengeos.org/cog-tiler-wasm
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

38Gefährdet · 16 % des Gesamtindex

Sicherheitslage

38Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 22 out of 22 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
2.2/7.5Code-Review — Found 9/26 approved changesets -- score normalized to 3
2.5/2.5Contributors — project has 5 contributing companies or organizations
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.5Lizenz — 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 — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not 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
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,8

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

55Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 26 von 26 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — Cargo.toml, crates/cog-tiler-wasm/Cargo.toml (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Rust (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 26
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesCargo.lock
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsCargo.toml, crates/cog-tiler-wasm/Cargo.toml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Rust (statisch typisiert)
50/55Handhabbare Dateigrößen — 1/11 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRust
largest_source_bytes61.905
source_files_sampled11
oversized_source_files1
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

8GitHub-Sterne
1Mitwirkende
26Commits, letzte 12 Monate
6Tage seit letztem Push
9Releases
1Bus-Faktor
0offene Issues
crates.io, npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'cog-tiler-wasm' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 3.8 / 10
3.8Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-25 21:25 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests22 out of 22 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
3Code-ReviewFound 9/26 approved changesets -- score normalized to 3
10Contributorsproject has 5 contributing companies or organizations
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
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 4
RegistryPaketVersionsvorgabeManifest
crates.iowasm-bindgen0.2crates/cog-tiler-wasm/Cargo.toml
crates.ioserde1crates/cog-tiler-wasm/Cargo.toml
crates.ioserde_json1crates/cog-tiler-wasm/Cargo.toml
crates.ioserde-wasm-bindgen0.6crates/cog-tiler-wasm/Cargo.toml
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "data-science",
        "geospatial",
        "raster",
        "wasm",
        "whiteboxtools"
      ],
      "is_fork": false,
      "size_kb": 349,
      "has_wiki": true,
      "homepage": "http://opengeos.org/cog-tiler-wasm",
      "languages": {
        "Rust": 82183,
        "JavaScript": 56515
      },
      "pushed_at": "2026-07-19T21:08:40Z",
      "created_at": "2026-06-17T20:46:13Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T07:09:05Z",
      "description": "Serverless Cloud Optimized GeoTIFF (COG) dynamic tiling in WebAssembly. TiTiler-style XYZ tiles, no backend, built on whitebox-wasm.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust",
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "https://opengeos.org",
      "name": "Open Geospatial Solutions",
      "type": "Organization",
      "login": "opengeos",
      "company": null,
      "location": "United States of America",
      "followers": 3836,
      "avatar_url": "https://avatars.githubusercontent.com/u/129896036?v=4",
      "created_at": "2023-04-04T19:02:44Z",
      "is_verified": null,
      "public_repos": 168,
      "account_age_days": 1208
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-07-19T21:09:29Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-07-19T17:35:53Z"
        },
        {
          "tag": "v0.2.6",
          "kind": "patch",
          "published_at": "2026-07-17T01:44:01Z"
        },
        {
          "tag": "v0.2.5",
          "kind": "patch",
          "published_at": "2026-07-12T04:49:29Z"
        },
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2026-06-20T17:13:37Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2026-06-18T16:31:42Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-06-18T16:04:31Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-06-18T04:14:59Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-06-18T03:01:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "770519f47692fd63a2de9a8a90a892b8998963b9",
          "body": "Fixes a coloured border drawn around every nodata boundary. Both bilinear\nsamplers interpolated raw pixels and only then tested the result against\nthe nodata sentinel, so a pixel beside nodata blended toward it, matched\nneither the sentinel nor NaN, and clamped to the bottom of the rescale\nwindow -- a blue ring under 'jet' tracing coastlines and swath edges.\n\nPatch rather than minor: no API change. The JS sampler moved to its own\nmodule for testability, but the package's exports are unchanged.",
          "is_bot": false,
          "headline": "chore(release): cog-tiler-wasm 0.3.1",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-07-19T21:08:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfbba7cc1944d207c6df2b46b2e07e10751a5f86",
          "body": "* fix: mask nodata before bilinear interpolation, not after\n\nInterpolating across a nodata boundary blends the sentinel into the\nvalue. The blend equals neither the sentinel nor NaN, so the equality\ntest applied to the *result* cannot recognise it. With the GDAL\nconvention of a large negative sentin\n[…]\neighbour falls back to nearest and holds the anchor's\nown valid value, matching the JS sampler, which already behaved this way\nfor its NaN neighbours. Thanks @coderabbitai for catching the divergence.",
          "is_bot": false,
          "headline": "fix: mask nodata before bilinear interpolation, not after (#23)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-07-19T21:06:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6af393a29ec60d9ffd18e48e0e3f3f45f82a7cb5",
          "body": "Ships the full 107-colormap set generated from the colormap sprite, up from 13\nhand-written ramps, for about 8.5 KB more wasm. Minor rather than patch: the\naddition is backward compatible, but consumers that mirrored the old short list\ncan now read the real set from colormaps().",
          "is_bot": false,
          "headline": "chore(release): cog-tiler-wasm 0.3.0",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-07-19T17:34:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab41dc70947af64c7d153167c8f6fc3625164e4e",
          "body": "The tiler knew 13 hand-written colormaps, so a renderer offering the full\nsprite had to narrow its picker, and the shared ramps only approximated the\nsprite (the 9-stop viridis was off by up to 19/255 on a channel).\n\nA generator now derives colormap.rs from the sprite itself, reducing each row\nto the fewest anchor stops that reproduce it within 2/255. That is +8.5 KB of\nwasm for 94 more colormaps, and the ramps match the GPU renderer by\nconstruction rather than by hand.",
          "is_bot": false,
          "headline": "feat(colormap): generate all 107 ramps from the colormap sprite (#22)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-07-19T17:34:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ed3774ed0a01d143e1bc81e5c2fa7d176b8247d",
          "body": "Require whitebox-wasm ^0.4.1, which fixes decoding of COGs written with a\nTIFF horizontal/floating-point predictor (PREDICTOR=2/3) such as NAIP tiles\n(opengeos/whitebox-wasm#6).",
          "is_bot": false,
          "headline": "chore(release): cog-tiler-wasm 0.2.6",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-07-17T01:43:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6549149a8d068d380d5a14531dd3f5f10097649",
          "body": "…(#21)\n\nnpm@latest is now npm 12, which requires Node >= 22; the pinned Node 20\nmade 'npm install -g npm@latest' fail with EBADENGINE and broke the\nv0.2.5 publish.",
          "is_bot": false,
          "headline": "ci(release): use Node 24 so the npm Trusted Publishing upgrade works …",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-07-12T04:47:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f4c3d6df23a2756a7df016d4a44d800de2b76d7e",
          "body": "makeReader slurped local File sources whole with blob.arrayBuffer(),\nwhich throws NotReadableError in Chromium for multi-GB rasters (e.g.\nthe 7 GB GEBCO 2026 GeoTIFF) - and the bytes could never fit in the\nwasm heap anyway. Only the header prefix and the requested tiles are\never needed, so give Blob\n[…]\nmemory\npath unchanged.\n\nVerified in a real browser via the maplibre-gl-raster example app: the\n7 GB gebco_2026.tif opens, renders the global extent, and serves tiles\nacross zoom levels with no errors.",
          "is_bot": false,
          "headline": "fix(reader): read Blob/File sources via ranged slices; 0.2.5 (#20)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-07-12T04:45:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f12f5910e3a91437b7214416de1c3ebe0e8f646",
          "body": "… 0.2.4 (#19)\n\ngeotiff-geokeys-to-proj4 cannot express a projection without a\nProjCoordTransGeoKey (e.g. ESRI world projections such as Mollweide /\nESRI:54009, which ArcGIS writes only as an `ESRI PE String = PROJCS[...]`\nWKT with a user-defined model type). It silently falls back to the bare\ngeogra\n[…]\nut a projected WKT is\npresent in PCSCitationGeoKey / GTCitationGeoKey, use that WKT instead;\nproj4 parses ESRI/OGC WKT directly. Also label such sources by their WKT\nCRS name rather than \"custom CRS\".",
          "is_bot": false,
          "headline": "fix(crs): warp projected COGs whose CRS is only in an ESRI PE string;…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-20T17:12:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "69444e04dce17a6ad420cd22ddbd6414d52e7989",
          "body": "…ed API; 0.2.3 (#18)\n\ngeotiff v3 defers fileDirectory fields (large arrays like ColorMap are not\nactualized eagerly), so the v2-style direct reads `img.fileDirectory.ColorMap`\nand `img.fileDirectory.PlanarConfiguration` returned undefined. With ColorMap\nlost, paletted (categorical) COGs such as NLCD\n[…]\ntection).\n\nVerified against the NLCD COG on geotiff@3: the loaded ColorMap yields the\nofficial legend colors (water (70,107,159), evergreen forest (28,95,44),\ncrops (171,108,40), developed (235,0,0)).",
          "is_bot": false,
          "headline": "fix(geotiff): read ColorMap/PlanarConfiguration via geotiff v3 deferr…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T16:30:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4adf90dba2f66fd526d398fa20ecba81934b80b0",
          "body": "The geotiff peer was pinned to ^2.1.0, which blocked consumers on\ngeotiff@3 (e.g. GeoLibre) from installing without --legacy-peer-deps.\nOnly the stable high-level geotiff API (fromUrl, fromArrayBuffer,\ngetImage, getGeoKeys, readRasters) is used, and it is unchanged across\nthe v3 major, so widen the \n[…]\nps to geotiff@3.0.5 to exercise v3.\n\nThe other peers (whitebox-wasm ^0.4.0, proj4 ^2.15.0,\ngeotiff-geokeys-to-proj4 ^2024.4.13) already satisfy current consumer\nversions, so no change is needed there.",
          "is_bot": false,
          "headline": "fix(deps): accept geotiff v3 in peer range; bump to 0.2.2 (#17)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T16:03:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "506a804b7a18c52e13c7c6bd1688a599ecb9e363",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to 0.2.1 (#16)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T04:13:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "acfa2f323c65f287fc968af22d460df34d51c467",
          "body": "Expose the existing `bidx` render param in the demo panel: a \"bands\" input\n(comma-separated 1-based indices; empty = auto). One band renders through the\ncolormap, three render as an RGB composite; changing it live re-renders.\n\nVerified in a browser with NAIP (4-band, EPSG:26911): default auto -> natural\ncolor RGB; \"1\" -> single band through gray; band order honored ([1,2,3] vs\n[3,2,1] swaps R/B).",
          "is_bot": false,
          "headline": "feat(demo): band selector (bidx) for visualization (#15)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T04:08:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7804c48f4c2e4854f2464b7d20afe943aa924aa7",
          "body": "…#14)\n\nPlanar COGs (e.g. the Landsat 1984.tif composite, 3 Byte bands) rendered as\nstriped garbage: whitebox-wasm's streaming decoder is chunky-only - its\ntile_range only addresses band 0's plane and decode_tile_f64 returns a single\nband's tile, so multi-band striding read the wrong layout.\n\nRead pl\n[…]\n4.tif now renders as a clean RGB composite (river +\nforest, no stripes), preview is 100% colorful, point returns [38,83,11] for 3\nbands; single-band dem and paletted NLCD are unaffected (chunky path).",
          "is_bot": false,
          "headline": "fix: render planar (INTERLEAVE=BAND) multi-band COGs via geotiff.js (…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T03:51:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bcdd5dc90cb60251c59310a718724158f769a81b",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to 0.2.0 (#13)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T03:00:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fae2c430ab7316030131418f63955d99e76f25c0",
          "body": "…y (#12)\n\n* feat: render curve (linear/sqrt/log), gamma, reverse colormap, opacity\n\nAdd the remaining render controls so cog-tiler-wasm can drive the same panel as\nGPU raster viewers (e.g. maplibre-gl-raster) - band/rescale/colormap were\nalready there; this adds the rest with matching math (pipeline\n[…]\nped (not\n  skipped by JS falsiness), and transferCurve uses |gamma-1|>1e-9; opacity is\n  clamped to [0,1] with a finite check.\n- demo: add explicit <label for> for the gamma and opacity inputs (a11y).",
          "is_bot": false,
          "headline": "feat: render curve (linear/sqrt/log), gamma, reverse colormap, opacit…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T02:53:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6f6526437d07642683b8f513b4244bf997d4c05b",
          "body": "…#11)\n\n* feat: TiTiler-style rendering API - bidx/RGB, 13 colormaps, preview, bbox\n\nUnify tile/image rendering on one extent renderer and add the image-generation\n+ band-selection parts of the TiTiler COG API.\n\n- Rust: add `colorize(grid, w, h, ...)` (1:1 colormap at any output size, the\n  arbitrary\n[…]\nrs before they reach\n  typed-array/canvas constructors.\n- demo: build the colormap <select> with DOM nodes instead of innerHTML.\n- cog-tiler.d.ts: update the rgbaToPng doc for the width/height params.",
          "is_bot": false,
          "headline": "feat: TiTiler rendering API - bidx/RGB, 13 colormaps, preview, bbox (…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T02:21:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "114672185807241627fe19b44cbf2b739c69fa0a",
          "body": "…atistics) (#10)\n\nAdd client-side equivalents of TiTiler's COG read endpoints as CogSource\nmethods. All additive (no change to the render path); they work on projected /\npaletted sources too via the existing warp path.\n\n- info() / infoGeoJSON(): bounds, count, dtype, nodata, overviews, tile size,\n  \n[…]\noat64, stats\nmin/max ~61/1524; point profiles vary correctly across the sample dome; NLCD\n(warp) point at (-100,40) returns class 82 = Cultivated Crops; click-to-point\nshows ~155 m at an Oregon pixel.",
          "is_bot": false,
          "headline": "feat: TiTiler-style read API (info, info.geojson, tilejson, point, st…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T01:18:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "46149c04eb29c36a02334de80caaca5973f53f84",
          "body": "* feat: open local rasters (File/Blob/bytes), not just URLs\n\nLet the tiler visualize a local COG with no server.\n\n- cog-tiler.js: openCog() now accepts a URL string OR in-memory bytes (File,\n  Blob, ArrayBuffer, Uint8Array). A `makeReader` abstraction provides the byte\n  reader - HTTP range for URLs\n[…]\nComponent against malformed %-escapes (400);\n  validate root containment with path.relative instead of startsWith (blocks\n  sibling-dir traversal); return 416 for out-of-bounds / inverted byte ranges.",
          "is_bot": false,
          "headline": "feat: open local rasters + npm run dev for local testing (#9)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T00:58:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7999d6e69bb0f97b44d81116ead83d4357d531e4",
          "body": "… (#8)\n\nPrefill the demo with https://data.source.coop/giswqs/opengeos/dem.tif (a real\nEPSG:3857 DEM served with HTTP range + CORS) and bump the rescale max to 1600 to\nsuit its ~60-1565 m elevation range. Demonstrates remote COG streaming on first\nvisit. Verified in a browser: auto-loads and renders (EPSG:3857, 3 levels).",
          "is_bot": false,
          "headline": "chore(demo): use the remote source.coop dem.tif as the default sample…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T00:23:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16f5c5a847bc16062065b2aadb15e9a15f722197",
          "body": "…e toggle (#7)\n\n* feat: ship cog-tiler.js in the npm package; MIT-only; demo globe toggle\n\nMake the reusable module a first-class part of the published package instead of\na demo-only file, relicense to MIT, and add a 3D globe toggle to the demo.\n\n- Move cog-tiler.js to the repo root (canonical packa\n[…]\nushes.\n- cog-tiler.d.ts: widen renderTileRGBA's return to\n  `Uint8Array | Uint8ClampedArray | null` (continuous tiles return the wasm\n  render() Uint8Array; paletted tiles return a Uint8ClampedArray).",
          "is_bot": false,
          "headline": "feat: publish cog-tiler.js in the npm package; MIT license; demo glob…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-18T00:18:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "42e516cd3a0e3b0b2d56915e2843b0115f377585",
          "body": "…er.js module (#6)\n\n* feat(demo): warp projected COGs on the fly + paletted/categorical rendering\n\nMakes the demo render non-EPSG:3857 and paletted sources (e.g. the NLCD 2021\nland cover COG, which is Albers + an 8-bit color table) instead of rejecting\nthem.\n\n- For non-3857 sources, reproject each W\n[…]\n with regex metacharacters are matched literally.\n- demo readRender(): guard min/max against NaN (fall back to defaults) and\n  ensure min < max, so a blank/invalid rescale field can't blank out tiles.",
          "is_bot": false,
          "headline": "feat: warp projected COGs + paletted rendering, as a reusable cog-til…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-17T23:40:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b297cd535ce65ee7fd397dadf7fa07b2f32f96fa",
          "body": "…S error (#5)\n\n* perf(demo): cache + parallel-fetch tiles, retry large headers, guard CRS\n\nAddresses slow tile loading and confusing failures on unsupported sources.\n\n- Cache decoded source tiles by level/col/row and dedupe in-flight requests\n  (getTile), so panning/zooming reuses overlapping tiles \n[…]\na tile's promise from the cache if its fetch/decode rejects, so\n  a transient network/decode error isn't cached permanently (otherwise the tile\n  would stay blank on every revisit until LRU eviction).",
          "is_bot": false,
          "headline": "perf(demo): cache + parallel tile fetch; large-header retry; clear CR…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-17T22:36:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "28a2fb2a26e59d924e656c453ba52e83adcf3d2a",
          "body": "- pages.yml: build the wasm package straight into a site/ dir next to the demo,\n  copy in demo/index.html and the sample COG, cache-bust the loader, and deploy\n  to GitHub Pages (mirrors the whitebox-wasm deploy pattern).\n- demo: import the wasm package relatively (./cog_tiler_wasm.js?v=__BUILD__),\n\n[…]\n\n\nVerified locally in a browser: the demo auto-loads the sample over HTTP range\nrequests, reports \"EPSG:3857, 2 levels\", and renders the elevation dome in the\nterrain colormap, fit to the data extent.",
          "is_bot": false,
          "headline": "feat: add GitHub Pages demo with a self-hosted sample COG (#4)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-17T21:46:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0d5ab5a4ee05cbde12ee671faf683302323d226c",
          "body": "…s (#2)\n\nThe unpkg `?module` URL for maplibre-gl serves a UMD bundle with no ESM\ndefault export, so `import maplibregl from \"...unpkg.../maplibre-gl.js?module\"`\nthrew \"does not provide an export named 'default'\" and the map never\ninitialized - the demo was broken at load. Switch to the esm.sh build\n\n[…]\ned a real EPSG:3857 COG DEM over HTTP\nrange requests; status reported \"EPSG:3857, 3 levels\" and the terrain-colored\nraster rendered correctly georeferenced on the MapLibre map via the cog://\nprotocol.",
          "is_bot": false,
          "headline": "fix(demo): import MapLibre from esm.sh so the map actually initialize…",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-17T21:27:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f107eb36f6bde882345facd1d926aeeb068e3589",
          "body": "* fix(demo): pin CogStream tile-record shape to whitebox-wasm 0.4.0\n\nVerified the real CogStream API against a generated EPSG:3857 COG driven\nthrough whitebox-wasm + cog-tiler-wasm in a browser:\n\n- tiles_for_window records are {col,row,offset,length} (no per-tile pixel\n  origin/size); derive origin \n[…]\n) cannot silently break on a future upstream\n  release.\n- demo: guard the parsed levels_json() against an empty array in openCog(),\n  throwing a clear error instead of a cryptic levels[0] dereference.",
          "is_bot": false,
          "headline": "fix(demo): pin CogStream tile-record shape to whitebox-wasm 0.4.0 (#1)",
          "author_name": "Qiusheng Wu",
          "author_login": "giswqs",
          "committed_at": "2026-06-17T21:16:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6ad984cc6f5f2916ff6a573be00a0a33400614ef",
          "body": "Serverless, TiTiler-style XYZ tiling of Cloud Optimized GeoTIFFs in\nWebAssembly. CogTiler is the tiling brain: slippy-map math, overview\nselection, and window->RGBA rendering (rescale + colormap + nodata alpha).\nCOG parsing/decoding and HTTP range reads are delegated to whitebox-wasm's\nCogStream; th\n[…]\nh, built-in colormaps\n- demo/index.html: MapLibre 5.24 cog:// protocol demo\n- builds to wasm32-unknown-unknown; wasm-pack web package\n- CI: fmt + clippy + wasm build + wasm-pack\n- 6 unit tests passing",
          "is_bot": false,
          "headline": "feat: scaffold 3857-first COG XYZ tiler (CogTiler + MapLibre demo)",
          "author_name": "giswqs",
          "author_login": "giswqs",
          "committed_at": "2026-06-17T20:53:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 9,
      "commits_last_year": 26,
      "latest_release_at": "2026-07-19T21:09:29Z",
      "latest_release_tag": "v0.3.1",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 4,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 0,
      "stars": 8,
      "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": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "crates/cog-tiler-wasm/Cargo.toml"
      ],
      "largest_source_bytes": 61905,
      "source_files_sampled": 11,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "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": [
        "crates",
        "npm"
      ],
      "dependencies": [
        {
          "name": "wasm-bindgen",
          "manifest": "crates/cog-tiler-wasm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "serde",
          "manifest": "crates/cog-tiler-wasm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "crates/cog-tiler-wasm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde-wasm-bindgen",
          "manifest": "crates/cog-tiler-wasm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.6"
        }
      ],
      "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": 22,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "giswqs",
          "commits": 26,
          "avatar_url": "https://avatars.githubusercontent.com/u/5016453?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "pages.yml",
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock"
      ],
      "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": 10,
            "reason": "22 out of 22 merged PRs checked by a CI test -- score normalized to 10",
            "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": 3,
            "reason": "Found 9/26 approved changesets -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 5 contributing companies or organizations",
            "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": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "770519f47692fd63a2de9a8a90a892b8998963b9",
        "ran_at": "2026-07-25T21:25:20Z",
        "aggregate_score": 3.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-19T21:09:37Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-19T21:06:37Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/opengeos/cog-tiler-wasm",
    "host": "github.com",
    "name": "cog-tiler-wasm",
    "owner": "opengeos"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 54,
      "inputs": {
        "security": 38,
        "vitality": 67,
        "community": 31,
        "governance": 56,
        "engineering": 71
      },
      "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": 52,
            "inputs": {
              "commits_last_year": 26,
              "human_commit_share": 1,
              "days_since_last_push": 6,
              "active_weeks_last_year": 4
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "4/52 weeks with commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "26 commits in the last year",
                "points": 12.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 26
                    }
                  }
                ],
                "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": 9,
              "latest_release_tag": "v0.3.1",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "9 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4
                    }
                  }
                ],
                "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": 31,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 14,
            "inputs": {
              "forks": 0,
              "stars": 8,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "8 stars",
                "points": 13.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 20,
            "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 5 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "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": 80,
            "inputs": {
              "merged_prs": 22,
              "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": "22/22 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 22,
                      "decided": 22
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 9/26 approved changesets -- score normalized to 3",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "followers": 3836,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "opengeos",
              "public_repos": 168,
              "account_age_days": 1208
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "3,836 followers of opengeos",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 3836,
                      "login": "opengeos"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "168 public repos, account ~3 yr old",
                "points": 19.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 168
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "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": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "22 out of 22 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "data-science",
                "geospatial",
                "raster",
                "wasm",
                "whiteboxtools"
              ],
              "has_wiki": true,
              "homepage": "http://opengeos.org/cog-tiler-wasm",
              "has_readme": true,
              "has_docs_dir": false,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "http://opengeos.org/cog-tiler-wasm",
                "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": "5 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 38,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.8
            },
            "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": "22 out of 22 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 9/26 approved changesets -- score normalized to 3",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 5 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 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": "26 of 26 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 26,
                      "sampled": 26
                    }
                  }
                ],
                "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": [
                "Cargo.lock"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "crates/cog-tiler-wasm/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, crates/cog-tiler-wasm/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, crates/cog-tiler-wasm/Cargo.toml"
                    }
                  }
                ],
                "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": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 26",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 26
                    }
                  }
                ],
                "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": 95,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 61905,
              "source_files_sampled": 11,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/11 source files over 60KB",
                "points": 50,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 11,
                      "oversized": 1
                    }
                  }
                ],
                "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",
    "Could not fetch crates package 'cog-tiler-wasm' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T21:25:36.548851Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/opengeos/cog-tiler-wasm.svg",
  "full_name": "opengeos/cog-tiler-wasm",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistiken.