Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-24 00:51 UTC

guenchi / Goeteia

A graphics optimized pure Scheme web programming toolkit.

SchemeMIT★ 58 Sterne⑂ 4 Forksseit Juli 2026Auf GitHub ansehen ↗

guenchi/Goeteia erreicht einen Gesundheitsindex von 50 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (67/100) ab, am schwächsten bei Security (16/100). Zuletzt vor 2 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

50
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.

50
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

guenchiPersönliches Konto
448 Follower161 öffentliche Reposseit Feb. 2017

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npmgoeteia1.5.32.36917vor 5 Tagenschemewebassemblywasmwasm-gccompilerself-hostingr6rslisp

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 2 Tagen
1.4/36Commit-Rhythmus — 2/52 Wochen mit Commits
18/18Commit-Volumen — 251 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_year251
human_commit_share1
days_since_last_push2
active_weeks_last_year2
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 1 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 7 Tagen
12.6/27Release-Rhythmus — Rhythmus unbekannt (nur ein Release)
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count1
latest_release_tag1.5.2
releases_from_tagsnein
days_since_latest_release7
mean_days_between_releases
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

44Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
28.5/60Stars — 58 Stars
4/25Forks — 4 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks4
stars58
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
Wie die Bewertung erfolgt
45/80Downloads pro Monat — 2.369 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesgoeteia
dependents
ecosystemsnpm
total_downloads
monthly_downloads2.369
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

53Mittel · 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
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
25.5/38.3PR-Annahme — 2/3 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs2
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
19.1/25Reichweite des Inhabers — 448 Follower von guenchi
25/25Kontohistorie — 161 öffentliche Repos, Kontoalter ca. 9 Jahre
Verwendete Eingangsdaten
followers448
owner_typeUser
is_verified
owner_loginguenchi
public_repos161
account_age_days3.444
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 17 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgoeteia
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

58Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.

Dokumentation

100Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://goeteia.dev
10/10Repository-Beschreibung
10/10Topics — 5 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsscheme, scheme-compiler, wasm, 3d-game, 3d-graphics
has_wikija
homepagehttps://goeteia.dev
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

16Kritisch · 16 % des Gesamtindex

Sicherheitslage

16Kritisch
Wie die Bewertung erfolgt
0/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — keine Daten
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.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — keine Daten
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
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate1,6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.

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.

35Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
36.3/40Lesbare Commit-Historie — 68 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,68
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
0/10Reproduzierbare Umgebung
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — Scheme ohne Typprüfungs-Konfiguration
55/55Handhabbare Dateigrößen — 0/11 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageScheme
largest_source_bytes9.434
source_files_sampled11
oversized_source_files0
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

58GitHub-Sterne
1Mitwirkende
251Commits, letzte 12 Monate
2Tage seit letztem Push
1Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • 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

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 4 ⇿
0Sterne
4Forks

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

223344422026-072026-072026-07
OpenSSF Scorecard 1.6 / 10
1.6Gesamtwert

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-24 00:51 UTC

0Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-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
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
k. A.Dangerous-Workflowno workflows found
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
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
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": [
        "scheme",
        "scheme-compiler",
        "wasm",
        "3d-game",
        "3d-graphics"
      ],
      "is_fork": false,
      "size_kb": 6357,
      "has_wiki": true,
      "homepage": "https://goeteia.dev",
      "languages": {
        "HTML": 2756,
        "Shell": 4812,
        "Scheme": 1243830,
        "JavaScript": 44253
      },
      "pushed_at": "2026-07-21T12:24:39Z",
      "created_at": "2026-07-11T02:03:39Z",
      "owner_type": "User",
      "updated_at": "2026-07-19T18:38:54Z",
      "description": "A graphics optimized pure Scheme web programming toolkit.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "Scheme",
      "significant_languages": [
        "Scheme"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "guenchi",
      "company": null,
      "location": "Paris, France",
      "followers": 448,
      "avatar_url": "https://avatars.githubusercontent.com/u/25831936?v=4",
      "created_at": "2017-02-16T22:58:31Z",
      "is_verified": null,
      "public_repos": 161,
      "account_age_days": 3444
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "1.5.2",
          "kind": "patch",
          "published_at": "2026-07-16T22:52:09Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "5b989071e37e24a13172483145f1b88908c52184",
          "body": "js-set! already runs v through ->js, which now yields the cached JS\nfalse ref for #f, so the explicit (if (eq? v #f) (js-eval \"false\") v)\nwrapper is dead -- hand v straight to js-set!.",
          "is_bot": false,
          "headline": "(web sx): drop redundant #f->\"false\" workaround in $sx-set-attr",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-18T16:26:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "290116aa53b891bdd8f46c63efaa4fae2ce40178",
          "body": null,
          "is_bot": false,
          "headline": "package.json: bump version to 1.5.3",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-18T16:16:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eeb344492a7158a3c723e1d41c39d427f80247ac",
          "body": "Version bump was made without instruction; restore 1.5.2.",
          "is_bot": false,
          "headline": "Revert \"package.json: bump version to 1.5.3\"",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-18T16:12:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69394dc7ef45cb8cbcf86f292f8bcfabee74e274",
          "body": null,
          "is_bot": false,
          "headline": "package.json: bump version to 1.5.3",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-18T16:10:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98e7ba099177bde13553c30aa92591db90f46ac4",
          "body": "->js turned a boolean into (js-eval \"true\"/\"false\"), and js-eval is a\nnested js-call. When a boolean rode in a non-first argument slot, that\nnested call pushed onto and drained the shared argStack mid-loop,\nshifting the caller's earlier args: (js-method cl \"toggle\" \"active\" #f)\ncollapsed into eval(\"active\"). Materialize the two primitive refs once\nat library init -- when the argStack is quiescent -- and hand ->js the\ncached values, so no leaf conversion re-enters the marshalling path.",
          "is_bot": false,
          "headline": "(web js): cache JS true/false so ->js never re-enters arg marshalling",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-18T15:52:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3aa1d51c51386918a99b724d84623b4d307819c0",
          "body": "…nto Graphics & Games where (gfx ktx) belongs",
          "is_bot": false,
          "headline": "README: move Compressed textures out of Design (compiler internals) i…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-18T14:26:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d24f7ac507fd3634d51b22fe5f6007a239f5f8e4",
          "body": null,
          "is_bot": false,
          "headline": "package.json: bump version to 1.5.2",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-16T11:39:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce57ef9ba7e10eed6c0bfc4f29b32bdf97db177e",
          "body": "Scheme drops a literal's leading zeros, so (fl 0 2037) was 0.2037,\nnot 0.02037 -- shaders reached for raw string literals (\"0.02037\") to\nget the small coefficients the form couldn't express.  A third\nargument states the fraction's width: (fl 0 2037 5) pads to 02037,\nand (fl 0 9 3) is 0.009.  Two-arg\n[…]\no\nthe output stays byte-identical across hosts (no flonum printer).\n\ntest/glsl.ss covers the padded fractions and that a width below the\nnatural length is a no-op.  184 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "(gfx glsl): (fl) takes a width, for fractions with leading zeros",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-16T11:36:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6250457bafe677bc09d1c10af621a1e57a20c389",
          "body": null,
          "is_bot": false,
          "headline": "README: the compiler is written in the Scheme it compiles (not a subset)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T16:30:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c5e5906cb2c0875441fb7272e71ed43c430c16f",
          "body": "…terline fuses instead of seaming",
          "is_bot": false,
          "headline": "skybox ball: downward rays mirror the sky at grazing angles -- the wa…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T03:28:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3daa270f124134080d8551423cb3a38539ed4d54",
          "body": null,
          "is_bot": false,
          "headline": "package.json: bump version to 1.5.1",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T03:13:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d946ee37e13936a9fd68574fd46a00a839820005",
          "body": "…vas drift (Firefox) no longer wraps what the browser fits",
          "is_bot": false,
          "headline": "(web glyphs): the advance scale calibrates against a DOM probe -- can…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T03:03:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce73e4da2c31b82f40eadd147d48b888b772365c",
          "body": null,
          "is_bot": false,
          "headline": "README: drop the compiler-fixes aside from M9",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T01:41:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3667f89e919e499b41d4ef3870405b608964c42b",
          "body": "… component's responsive shape travels with it",
          "is_bot": false,
          "headline": "(web component): @media blocks carry descendant/pseudo sub-rules -- a…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T01:40:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5992e8ccf6a653d971bcd4d0fc93b9df48f5c0ff",
          "body": "bignum-free literals header\n\nReal basisu output found two gaps the small goldens never reached.\nA literals section past 1023 bytes uses the 4/5-byte header whose\nfields were cut from a $u32 -- a bignum past 2^30, and bitwise ops on\nbignums trap (\"illegal cast\"); the fields now assemble from bytes.\nA\n[…]\nngth + two checksums.  examples/fx-verify.{ss,html}: the\nreal-asset page -- Box.glb vs gltfpack -c (meshopt+quantized) side by\nside, and a zstd UASTC crate behind.\n\n185 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "(gfx zstd): multi-block frames -- persistent entropy state, and a",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T01:24:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c179de32b52cbcf8a7a8e4647fb52fda03c22c3a",
          "body": "… fewer",
          "is_bot": false,
          "headline": "(gfx wgsl) grows compute: structs, storage arrays, gid -- one dialect…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T01:05:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a5e37284b1659225101787d2b7af8e87ec33101",
          "body": "(group () ...) -- empty attributes written () instead of (@) -- fed\nthe walker a non-form child, and (car '()) trapped the whole compile\nwith \"illegal cast\" (self-hosted) or \"() is not a pair\" (Chez),\npointing nowhere.  Both walkers now check each child is (tag ...) and\nraise \"form must be (tag (@ attrs ...) kids ...)\" naming the offender.",
          "is_bot": false,
          "headline": "(gfx scene, sgpu): name malformed sgl forms instead of trapping",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T01:04:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60399f10e6ae5404e1890a1feca274b31cdf87d2",
          "body": null,
          "is_bot": false,
          "headline": "package.json: bump version to 1.5.0",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-15T00:45:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe88a80271518285bef6fbf5934a1be76aa26948",
          "body": "An instanced group re-composed, SIMD-frustum-culled, packed and\nre-uploaded its visible instances every frame -- wasted when neither\nthe group nor the camera moved.  Each group now caches its camera-\nfrustum signature, transform generation and visible count; when both\nsignatures hold, it redraws the\n[…]\ne full path as before.\n\ntest/scene.ss: a still frame after a static one ships zero buffer data\n(was one instance upload); a signal that moves an instance re-ships.\n\n184 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "(gfx scene): static instanced groups skip the per-frame re-cull/upload",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T23:28:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "03873eaa95790814297fe9cd5f72f92766eae188",
          "body": null,
          "is_bot": false,
          "headline": "README: the --script flag",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T23:18:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f31af901059e158eac83bb0553d5e855d70d03d3",
          "body": "…s stand down",
          "is_bot": false,
          "headline": "script mode keeps the cheap old passes: only the post-batch-2 analyse…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T23:09:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec6fca9cd71c173d162b1ede1cc6b7b29281248b",
          "body": "…r fast compiles",
          "is_bot": false,
          "headline": "script mode: (%opt 0) / --script turns the optimization passes off fo…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T22:45:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd95e42ad37a3e7b837f1f96c299ee1e402e9429",
          "body": "Overlapping glass of one instanced group composited in whatever order\nthe cull's atomic compaction emitted -- wrong when instances overlap.\nTranslucent groups now run a single-workgroup cull that gathers the\nfrustum+hi-Z survivors, bitonic-sorts them by NDC depth (descending,\nup to 256 per group), a\n[…]\nessly (test/sgpu.ss); rendered in a\nWebGPU browser -- three overlapping glass panes composite in depth\norder, nearest on top, opaque tinted correctly through them.\n\n182 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "(gfx sgpu): sort translucent instances back-to-front on the GPU",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T22:33:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c7fe99f86da5ff7f9ddcd4e3ba239aecacf554a",
          "body": "The declarative sgpu path now culls occluded instances GPU-side, not\njust frustum-culls.  The cull compute samples a hierarchical-Z pyramid\nover each instance's bounding-sphere screen footprint and drops any\nwhose nearest depth is behind everything already drawn there -- the\nmath mirrors examples/gp\n[…]\nlls + 10 reduce dispatches per frame, draws and upload\ncounts unchanged); the rendered image is identical with occlusion on\nand off, confirmed in a WebGPU browser.\n\n182 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "(gfx sgpu): hi-Z occlusion culling in the GPU-driven scene",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T21:40:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c6660ee4eb834894f94c15ecdd96af5ee3b2e20",
          "body": "Positions, normals and uvs stored as BYTE / UBYTE / SHORT / USHORT\n(gltfpack's default output) now decode: $deq reads each component per\ncomponentType and dequantizes -- normalized signed by /127 or /32767\n(clamped to -1), normalized unsigned by /255 or /65535, and plain\nintegers straight through (p\n[…]\n with u16\npositions and normalized i8 normals under a scaled/translated node,\ndecoded to exact expected floats (127/127, -127/127, 64/127).  Unblocks\ngltfpack's meshopt+quantization assets end-to-end.",
          "is_bot": false,
          "headline": "(gfx gltf): KHR_mesh_quantization -- integer vertex formats",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:47:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c14b94ffbe2b2c2b63efedb3e911f2d3ca06006b",
          "body": "docs/graphics.md walks the two command-buffer backends, the shared\nglsl/wgsl shader forms, declarative sgl / sgl-gpu scenes, the SIMD\nzero-boxing math, the compressed-asset pipeline (gltf / ktx / zstd /\nuastc / meshopt), and the fx/sprite toolkit -- grounded in the source,\nevery API checked against its (export ...) list.",
          "is_bot": false,
          "headline": "docs: a developer guide to the graphics stack",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:47:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a5498d270ad9178ac725bbae80583c466ea7732",
          "body": null,
          "is_bot": false,
          "headline": "package.json: match the README tagline (Scheme-to-WASM)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:35:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4574b229ed7010f626e6aa074b3f2de0ac15684",
          "body": null,
          "is_bot": false,
          "headline": "README: lead with the graphics-optimized compiler tagline",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:34:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c86751b3c3681de05cb38c9f9b913844a89c8a1f",
          "body": null,
          "is_bot": false,
          "headline": "package.json: describe goeteia as a graphics-optimized Scheme compiler",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:33:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df1240600e799775f97aec3ece2922a01d6dc278",
          "body": "New (gfx zstd), (gfx uastc), (gfx meshopt) entries in Graphics & Games,\na UASTC note on (gfx ktx), and an M9 milestone -- each decoder written\nfrom spec, golden-verified against zstd / basisu / meshoptimizer, plus\nthe two compiler fixes (cond => clauses, library-internal macros).",
          "is_bot": false,
          "headline": "README: document the compressed-asset pipeline (zstd / uastc / meshopt)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:31:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3781411f45a269ba09f4b935eba5d838b2f9d44c",
          "body": null,
          "is_bot": false,
          "headline": "drop the stray .DS_Store files, ignore them",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:29:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf3d4c3a75624d7ad9e5f138058cd111b0cdf716",
          "body": null,
          "is_bot": false,
          "headline": "examples ride fx-mesh: fifteen copies of the upload dance retire",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:29:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ab6ebdb437444eaffbabc4fcc68557719cf11cc",
          "body": "…collide",
          "is_bot": false,
          "headline": "fx-mesh record renames apart from (gfx mesh)'s own -- spliced builds …",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:18:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a4f4946fa63acd56490cb504864fd262986e992",
          "body": "…he site's working parts, extracted",
          "is_bot": false,
          "headline": "fx-mesh handles, palette->root, computed-style, and (web glyphs) -- t…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:14:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "414c462072dfb2b4f533b9a87cf611d043fba48b",
          "body": null,
          "is_bot": false,
          "headline": "(web component): the in-library macro caveat is fixed, drop the note",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T19:01:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "942dc4b3934565bcc4a73b68734d4d8ad7cab93b",
          "body": "A (define-syntax ...) inside a library body was not registered before\nthat same body was expanded, so a sibling use compiled as a call to an\nundefined name -- \"cannot call <macro>\", or \"illegal cast\" when the use\nsat in an arithmetic/bitwise context.  Top-level program macros worked\n(compile-program\n[…]\n use.\n\nRegression test: a library that defines and uses syntax-rules macros in\ncall and bitwise positions (test/macro-lib.ss + test/tmac/lib.ss).\n\nFixpoint rebuilt; 180 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "compiler: expand macros defined and used within one library",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T18:53:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63ae3a165c4ebce0cf6957ba9f8baa299a2c838a",
          "body": "…ponent",
          "is_bot": false,
          "headline": "(web component): element-attached css interned to classes, define-com…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T18:47:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82b60fa9d84ed251eb3fcb3461feaec7b1d93b26",
          "body": "Wire (gfx zstd) + (gfx uastc) into the container reader.  A UASTC\nfile (DFD color model 166) now decodes to RGBA: ktx-uastc-level!\nreads the level, inflates the zstd frame when supercompressionScheme\nis 2, and runs the block decoder; ktx-upload! routes UASTC to an\nuncompressed RGBA upload (the block\n[…]\nbasis path.\n\nGolden end-to-end against basisu's RGBA32 unpack for both a raw\n(scheme 0) and a zstd-supercompressed (scheme 2) 16x16 UASTC file\n(test/ktx-uastc.ss).\n\n178 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "(gfx ktx): decode UASTC KTX2 files end-to-end",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T17:42:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "70f09a0ead4e3f1910731942cb81f5fb952013bb",
          "body": "A UASTC block is 128 bits of ASTC-like data: a 7-bit mode code (19\nmodes) selects 1/2/3 subsets, one or two weight planes, and RGB/RGBA/\nLA/solid layout; endpoints and per-texel weights follow, are unpacked\nand interpolated to 16 texels.\n\n  (uastc-block! src dst)        ; one 16-byte block -> 64 byt\n[…]\nme.  The golden covers the 13 modes the\nbasisu encoder emits across solid / gradient / noise / partitioned /\ndual-plane / LA inputs, byte-for-byte (test/uastc.ss).\n\n176 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "(gfx uastc): UASTC LDR 4x4 -> RGBA, from the basisu transcoder",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T17:32:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea6cf68871fb6bc7067612b785d0773f5714e083",
          "body": "xpand-cond handled `else`, bare `(test)`, and `(test body...)` but\nnot `(test => proc)` -- the R6RS/R7RS form that applies proc to the\ntest's truthy value.  Add it: bind the test once, and on truth call\nproc on that binding instead of re-evaluating.\n\n  (cond ((assv k al) => cdr) (else #f))\n\nFixpoint rebuilt; 174 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "compiler: cond's => arrow clauses",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T17:12:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52c1a2a771f24a1cf706500cad3c5b6aa46f6c94",
          "body": "The frame, all three block types (raw / RLE / compressed), Huffman\nliterals (direct and FSE-described weights, single- and four-stream)\nand the interleaved FSE sequence streams, over staging memory:\n\n  (zstd-decode! src slen dst scratch)  ; -> bytes written\n\nKTX2 wraps its UASTC payload in a zstd fr\n[…]\nolden against the zstd CLI on four inputs exercising raw\nblocks, RLE literals, Huffman+FSE, and a large four-stream blob with\nFSE-described weights (test/zstd.ss).\n\n174 tests green, stage0 and stage1.",
          "is_bot": false,
          "headline": "(gfx zstd): a Zstandard decompressor, from RFC 8878",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T17:00:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5bc82f763365e11c3d053fa6d1ab2f162b7adcef",
          "body": "The vertex and index codecs gltfpack emits, plus the octahedral,\nquaternion and exponential filters -- all pure Scheme over staging\nmemory, wired into (gfx gltf) so a compressed bufferView reads like\nany uncompressed accessor.\n\nVertex codec: SoA byte-plane transpose, 2-bit group selectors over\n{0,2,\n[…]\nox (simple) and Fox (free indices, FIFO, reset, exp/quat).\n\nKHR_mesh_quantization (integer vertex formats gltfpack also emits) is\na separate extension; the codec is complete, dequant is the follow-up.",
          "is_bot": false,
          "headline": "(gfx meshopt): the EXT_meshopt_compression decoder, from the spec",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T16:32:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "20a99985fef0e523123d9757af7885f5abdcd8d3",
          "body": "WebGPU pins blend and depth-write state to the pipeline, so (gfx\ngpu) grows gpu-pipeline2-blend! (src-over alpha blend, depth writes\noff), and sgpu builds a blended lit + textured pair.  A group any of\nwhose instances has colour alpha below one is flagged translucent\nat build; it draws after every o\n[…]\nd glass;\nverified rendering and animating in headless Chrome with zero WebGPU\nvalidation errors (caught two layout mismatches that way).  Instance\nback-to-front sort within a group is a v2; 170 green.",
          "is_bot": false,
          "headline": "sgpu translucency: a blended pass on its own pipeline",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T15:38:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "115304ef3121dd3c4be9520610a58cd74d38f720",
          "body": "(gfx gl) grows cmd-depth-write! (opcode 42, gl.depthMask) -- the\ndepth WRITE mask independent of the test.  (gfx scene) uses it: a\nmesh whose colour alpha is below one skips the opaque material\npasses and joins a translucent accumulator tagged with its program\nand setup; after all opaque geometry is\n[…]\n job).  Test: an opaque box plus a\nnear and a far glass mesh -- the mask drops, the blended pass\nfollows, and the farther pane draws before the nearer.\nexamples/fx-scene gains a glass pane; 170 green.",
          "is_bot": false,
          "headline": "Scene translucency: a back-to-front blended pass",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T15:30:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c20eeae003d95c3ec47f9b5262006aa713b93e3",
          "body": "The second half of the vertex-cache optimization: after\nmesh-optimize! reorders the triangles for the post-transform cache,\nmesh-remap! renumbers the vertices into the order the indices first\nreference them and moves every per-vertex stream (positions,\nnormals, uvs) to match.  The vertex buffer is t\n[…]\n fingerprints\ntriangles by vertex POSITION (the remap renumbers indices, so only\nthe geometry is invariant) and checks that each index's first\nappearance introduces the next vertex number in sequence.",
          "is_bot": false,
          "headline": "mesh-remap!: vertices renumbered into first-use order",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T14:21:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3352f270fc1805fecf422245b879e1cb829b6f9",
          "body": "(gfx sgpu) grows (texture slot): a mesh with a texture joins a\ngroup keyed on geometry AND texture (so a shared texture instances\ntogether), the group's vertices carry uvs (stride 32), and it draws\non a textured pipeline through its own bind group -- env uniform, a\nshared sampler, the group's textur\n[…]\ning assembly with a checker texture; verified\nrendering and animating in headless Chrome (colour count jumps from\nthe texture, zero errors).  PBR probes, lod and static welding\nremain GL-backend-only.",
          "is_bot": false,
          "headline": "sgpu: textured materials",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T14:18:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a5cbf4668fb87016d1eba56b7984177e13f4702e",
          "body": "-build now also fills a 1024-entry table indexed by the next\n10 bits: each entry is sym*32 + len for any code of at most 10 bits\n(the vast majority), -1 to fall back to the length walk for the\nrare 11+ bit code.  The reader consumes bits low-first while a\ncanonical code reads high-first, so a code's\n[…]\n, so the decode is one term of several).  Golden\nbytes unchanged -- every mip level still decodes bit-for-bit\nagainst the reference transcoder, which is the proof the table is\nbuilt right.  170 green.",
          "is_bot": false,
          "headline": "Huffman decode gets a 10-bit fast table",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T14:12:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa27d4e8c8134cd3fed94de593277f797e167e4a",
          "body": null,
          "is_bot": false,
          "headline": "Rebuild example wasm on the function-specialization codegen",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T14:08:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7992450c71dc13ccc0d087aa1902c623d91c991",
          "body": "A top-level fixed-arity function that is only ever called directly\n(never used as a value) takes some parameters as raw f64: a\nparameter qualifies when every source-level call site passes a\nflonum expression for it, proven by a monotonic-demotion fixpoint\n(an argument's flonum-ness can depend on the\n[…]\n 1.5x on\nSafari (V8 already elides its box).  Fixpoint holds three\ngenerations, 170 tests green cross-host.  The deeper trig chain\n(-sin-poly, flcos) needs let-binding-aware argument analysis --\na v2.",
          "is_bot": false,
          "headline": "Flonum function specialization: top-level functions with f64 parameters",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T14:07:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "82ddb7dcd03730603aedad6501cfe9d02d39a8f3",
          "body": null,
          "is_bot": false,
          "headline": "bench: check in the cross-engine harness (ss + html + report server)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T13:45:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d3204a039358d5a838c6463b8826d3776cec959",
          "body": "The cross-engine benchmark (bench/cross-engine.md) caught a shipped\nregression: the fused f32x4.relaxed_madd from commit 860367e -- a\n~3% V8 win on a memory-bound kernel -- fails to validate on this\nSafari's WasmGC build ('relaxed simd instructions not supported'),\nwhich broke EVERY module using %f3\n[…]\ns ~2.3-3x slower than V8 throughout, so its allocator is the\nbottleneck deboxing relieves.  flsin barely moves (call-boundary\nbox), which is precisely what flonum function specialization\ntargets next.",
          "is_bot": false,
          "headline": "Revert %f32x4-axpy! to portable mul+add; cross-engine benchmarks",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T13:45:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae9200105a65434c5b224352222cd05df44e762a",
          "body": null,
          "is_bot": false,
          "headline": "Rebuild example wasm on the batch's final codegen",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:47:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a4e134ecf6510225ea9ee0d2aa6d6b08dfdf848",
          "body": "The sgl notation's second backend: the same walker, signal holes\nand transform chains, but every mesh joins a geometry group\n(WebGPU has no cheap per-draw uniforms, so instancing is the only\npath and a single is a group of one).  Instances live in storage\nbuffers as matrix + color + world bounding s\n[…]\ndraw each, a static frame re-uploads nothing but env\nand argument resets, and a swinging signal re-uploads exactly its\nown group.  Verified rendering and animating in headless Chrome.\n170 tests green.",
          "is_bot": false,
          "headline": "(gfx sgpu): the declarative scene on WebGPU, culled where it lives",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:45:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9875f521db078da272c52773a026a590fc07bb71",
          "body": "The GPU-driven cull grows eyes: gpu-hzb-init! builds an r32float\nmax-mip pyramid with embedded copy/reduce compute pipelines and\nper-level bind groups; gpu-end-pass! (opcode 15) closes the\noccluder render pass, flipping later passes to loadOp load so the\noccluders' image and depth persist; gpu-hzb! \n[…]\n (dataURL-equal in headless\nChrome), and a negative control with the comparison inverted\nvisibly punches holes.  Mock tests cover the pyramid build, the\npass split and the mixed bind group; 168 green.",
          "is_bot": false,
          "headline": "Hierarchical-Z occlusion culling: what the walls hide never draws",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:39:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf548e9425583c4f2185766189dc609193cbc4f2",
          "body": null,
          "is_bot": false,
          "headline": "README: alpha slices in the transcoder design note",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:31:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "223d1f6974f5a57af6baa1c1214fdfff820a430b",
          "body": "An RGBA ETC1S file carries alpha as a second slice per image --\nstructurally identical, grayscale (R=G=B is the coverage), sharing\nthe same codebooks.  ktx-transcode!'s rgba target now decodes it\nthrough the same slice machinery with a writer that touches only\nthe A byte of the pixels the RGB pass l\n[…]\niles through the RGBA path\n(the compressed RGB block targets cannot carry it).  Golden: a\nbasisu-encoded RGBA gradient decodes byte-for-byte against the\nreference transcoder's rgb + alpha unpack pair.",
          "is_bot": false,
          "headline": "Alpha slices: the second grayscale slice fills the A bytes",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:31:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "214614d6bc1b765013e998681f1737a3272690bf",
          "body": "Instancing covers same-geometry copies; welding covers the rest: at\nbuild, lit singles whose transform generations all read zero (the\nsignal effects already ran, so zero is proof of static) group by\ncolor, bake their model matrices into fresh vertex data (positions\ntransformed, normals rotated and r\n[…]\nroups that would\npass 65536 vertices, dynamic nodes, lod alternatives and other\nmaterials stay individual.  Test: box + sphere + torus weld to a\nsingle 516-index draw beside the one signal-driven box.",
          "is_bot": false,
          "headline": "Static strangers weld into one draw",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:26:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8553e848015d6ba4813160bafc4132728f8e4ba6",
          "body": "The linear-time greedy from the classic writeup: a simulated\n32-entry LRU scores each vertex (recent high, the last triangle's\nthree at 0.75, the tail on a 1.5-power falloff; low-valence\nvertices boosted 2/sqrt(n) so stragglers don't strand), triangles\nscore as their vertices' sum, the best emits ne\n[…]\nIFO cache and reports misses per triangle, so the whole thing\nverifies headlessly: the test shuffles a sphere into soup (ACMR >\n1.0), optimizes, and lands under 0.75 with the triangle multiset\nintact.",
          "is_bot": false,
          "headline": "mesh-optimize!: Forsyth vertex cache ordering, mesh-acmr to prove it",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:22:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd732f5a50c5e01e336553dbd908554c003d31ac",
          "body": "KTX2 already stores level data smallest mip at the lowest offset,\nso a prefix of the file is a usable texture.  ktx-stream! makes\nthree ranged requests -- a 1KB head for the level index, the prefix\nbelow level 0's offset (metadata, codebooks, every small mip), then\nthe rest -- uploading as they land\n[…]\nnge support answers 200 and everything degrades to one\nload and a single 'full callback.  Verified in headless Chrome over\na throttled connection: preview at 339ms, full at 558ms, two\ndistinct phases.",
          "is_bot": false,
          "headline": "ktx-stream!: the mip chain streams smallest-first",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:18:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "860367e46b1e88e9b6d6f04a14526ee77e289701",
          "body": "The multiply-accumulate at the heart of every m4s kernel is now a\nsingle f32x4.relaxed_madd -- every Wasm GC engine ships relaxed\nSIMD (it predates GC in all of them), and the fused rounding is at\nworst more accurate than the pair it replaces.  The b/s/a operand\norder madd wants differs from the source order, so a's address\nparks in an i32 local between.  Exact-value SIMD tests unchanged;\nfixpoint holds, 168 green.  ~3% on m4-mul (the kernel is memory\nbound, as bench/perf.ss always said).",
          "is_bot": false,
          "headline": "%f32x4-axpy! fuses: one relaxed_madd instead of mul+add",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:13:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6e942723d2f845d54aea46c133a6449d66d53ad",
          "body": "The site collector was a naive tree walk: an inlined callee whose\nPARAMETER shares the loop's name (gl-cube-face-fb!'s 'level' inside\nibl-prefilter!'s level loop) left a let binding pair the walker\nmistook for a call site.  It now respects binder structure -- quote\nand lambda close their regions, let and %loop walk inits then stop\nat a shadowing binder -- mirroring what loop-ok? proved.  All 39\nexample wasm rebuilt on the lowered+typed codegen; browser sweep\nand pixel checks clean.",
          "is_bot": false,
          "headline": "loop-sites walks structurally; examples rebuilt on the typed loops",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:11:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f4d391269fc63badfc29c964bcf5715ab3780d2a",
          "body": "On the lowered-loop base, each parameter classifies by a\ndemote-only fixpoint (parameters may depend on each other): if the\ninit and every self-call argument stay flonum expressions, the\nparameter lives in a raw f64 local across iterations -- no box per\ntrip; likewise i32 for the closed integer set.\n[…]\nonum accumulator finally lives in a register -- the tight\nfl+ microbenchmark 4x, the frustum cull 2.1x, collide's character\nstep 1.5x, the ETC1S transcoder 1.9x.  Fixpoint holds, 168 green\ncross-host.",
          "is_bot": false,
          "headline": "Loop variables earn typed slots: f64/i32 locals across iterations",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:04:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6294504c4c6349a4c03f4934cfc4a658c95337bd",
          "body": "A named let whose name only ever recurs as a correct-arity tail\ncall compiles as the new %loop core form: parameters are plain\nlocals, iteration pushes the new values on the wasm stack, sets the\nlocals in reverse (parallel binding for free) and brs back to the\nheader; the body's fall-through is the \n[…]\npshot itself\nSHRANK 10KB, loops as blocks being smaller than lifted closures.\nTyped (f64/i32) loop parameters come next on this base.\nFixpoint holds; 168 tests green cross-host, both hosts byte-equal.",
          "is_bot": false,
          "headline": "Named lets lower to wasm loops: no closure, no call per iteration",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd3f4d4e4c44f353bbbec1743b63abfff246de35",
          "body": "The integer sibling of the f64 context, over the CLOSED set --\noperations whose result always fits i31 given fixnum inputs, so the\nboundary box is always faithful: bitwise and/ior/xor, arithmetic\nshift right, shift left normalized to 31 signed bits (matching what\nboxing truncated), remainder and pos\n[…]\nlides most i31 tag\ntraffic within blocks); the structural win this enables is the\nloop lowering that follows, where loop-carried integers get typed\nlocals.  Fixpoint holds, 168 tests green cross-host.",
          "is_bot": false,
          "headline": "The i32 context: raw machine integers in locals, and an ordering fix",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T11:44:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c76ee0f533e8bc6be9594814cd7d9e287998893a",
          "body": "README gains a 'Compressed textures' design subsection -- the\nfixnum-safe bit reader, the cancelling bit-reversals, the DPCM\npalette models, the approximate-MTF history and the 2x2 prediction\nstate machine, and why this was written from the spec instead of\nvendoring the 300-700KB C++ transcoder -- plus an M8 roadmap entry\nand a strengthened (gfx ktx) list entry.  The library header now\nstates the explicit non-goals (alpha slices, UASTC, P-frames,\nglobal codebooks, cube/array/3D).",
          "is_bot": false,
          "headline": "Docs: the transcoder's design notes",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T11:21:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d039c0ace25fdf3f36aa28b7ce85ddaff8dacb32",
          "body": "ktx-fetch! pulls the .ktx2 into staging, ktx-upload! transcodes\nevery level for whatever the context speaks (ETC1 / BC1 / RGBA\nfallback) and ships the mip chain; the demo spins a crate wearing a\n17KB Basis ETC1S asset and reports the family and transcode time in\nthe tab title.  Headless Chrome: the ETC1 path, all five levels of\na 256x256 in 8ms -- the pure-Scheme decoder is fast enough that the\nload-time cost is invisible.",
          "is_bot": false,
          "headline": "examples/fx-ktx: a compressed texture through our own transcoder",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T11:01:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8a15298d8e7e3f56e4c6889cbb8ad9f29d2c7f3",
          "body": "KTX2 container + BasisLZ/ETC1S decoder + three transcode targets,\nno C++ transcoder wasm, no dependency -- written from the Khronos\nKTX2 and ETC1S/BasisLZ bitstream specifications:\n\n- LSB-first bit reader that never leaves fixnum range (refill caps\n  at 30 live bits; no read needs more than 16)\n- ca\n[…]\nentical, the\nETC1 repack spec-decodes back to the same goldens, BC1 lands within\ntranscode tolerance.  P-frame video and global selector codebooks\nare rejected cleanly; alpha slices are the next step.",
          "is_bot": false,
          "headline": "(gfx ktx): the Basis Universal transcoder, in Scheme, from the spec",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T10:43:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "872639be5bbd226fcb5a2a169944132d97d70389",
          "body": null,
          "is_bot": false,
          "headline": "Rebuild example wasm against the second optimization batch",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T10:09:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e44df444a50649ac0742af5f5b39da2b6e74f52a",
          "body": "The attach handshake asks for timestamp-query when the adapter has\nit; gpu-gpu-timer! then builds the 2-slot query set with its\nresolve and map-read buffers, the render pass stamps its beginning\nand end, and each frame resolves and (when the reader is free) maps\nthe pair back -- gpu-gpu-ms surfaces \n[…]\ntimer!/gl-gpu-ms on the GL side, so both backends\nanswer the same question the same way.  Mock covers the query set,\nresolve, copy, map and the 4.2ms readback; gpu-cull re-verified in\nheadless Chrome.",
          "is_bot": false,
          "headline": "WebGPU frame time: timestamp queries around the render pass",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T10:08:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bc0f6f5d2496190ecf248b5a95a4228ebb99c67b",
          "body": "…boxing\n\nEach channel remembers the keyframe span it last sampled: playback\nadvances at most one span a frame, so the cached cursor (or its\nsuccessor) answers in O(1) and a wrap or scrub falls back to binary\nsearch -- the per-frame linear scan from keyframe zero is gone.\nThe unblended rotation path \n[…]\nquaternion fields through f64\nlocals, no quaternion vectors allocated; the crossfade path keeps\nits temporaries.  166 green -- wrap, scrub, blend and the state\nmachine all sample through the new path.",
          "is_bot": false,
          "headline": "Animation channels sample through a play cursor; the hot nlerp stops …",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T10:05:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2245b14cb060a3f18217bd43ae1d892e13cf851f",
          "body": "The material passes sort each frame: every lod-active node's cached\nmodel matrix places it (the refresh hoisted out of the draw so the\nsort key reads it), squared eye distance orders opaque geometry\nfront to back for early z, and the tex pass keys texture-major so\nequal textures bind once, nearest first within each.  A small\nmerge sort over (key . node) pairs; instanced groups were already\none draw and stay put.  Test: the far box declared first, the near\none encodes first.",
          "is_bot": false,
          "headline": "Singles draw nearest first; textured passes group by texture",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T10:01:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ae41d6473e89c2904d3200cfdf365d0b74e55c9",
          "body": "Every transform vector grew a generation slot; the effects that\nsignal-driven holes install bump it when they rewrite a transform\nfield (colors and camera fields don't -- no matrix depends on\nthem).  A node's model matrix caches against the sum of its own and\nits enclosing groups' generations: singl\n[…]\nto buffer slot.\nA static mesh composes once, ever; a frame recomputes exactly what\nmoved.  Test: a signal walks one of two instanced boxes past the\nfar plane between frames -- two instances, then one.",
          "is_bot": false,
          "headline": "Scene matrices cache against a transform generation signals bump",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T09:57:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2806c04d93122315b88c0a64ab950c81cea6a895",
          "body": "….mjs\n\nloadGoeteiaWorker(url, canvas) transfers the canvas to a module\nWorker (OffscreenCanvas) and forwards keys and pointer events as\nmessages; rt/worker.mjs wears the canvas API the GL stack touches\n(width/height, getContext, addEventListener) over the transferred\nsurface, intercepts global liste\n[…]\nne\ndifference is the canvas comes from the worker global, not the DOM.\nexamples/fx-worker: the plasma with a jam-the-main-thread button;\nverified animating in headless Chrome with zero console errors.",
          "is_bot": false,
          "headline": "The render loop leaves the main thread: loadGoeteiaWorker + rt/worker…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T09:49:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3769125500ac7acddbf8462308a8eefcb9c88b6",
          "body": "(gfx gpu) grows the last pieces of a GPU-resident pipeline:\ngpu-indirect! (INDIRECT | STORAGE argument buffers),\ngpu-compute-group*! (a compute bind group over any buffer list,\nbound in order), and opcodes 13/14 --\ngpu-draw-indexed-indirect!/gpu-draw-indirect!, the draw whose\narguments the GPU wrote\n[…]\ngument buffer.  The CPU's\nframe is 176 bytes of uniforms and a 20-byte argument reset.\nVerified rendering in headless Chrome; mock tests cover the usage\nbits, N-buffer group and both indirect opcodes.",
          "is_bot": false,
          "headline": "GPU-driven culling: compute-compacted instances, indirect draws",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T09:45:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fdfe3d72e839df027190f7aeea8c4415d9dd2fac",
          "body": "The dot product the SIMD family was missing: v128.load both\naddresses, f32x4.mul, and the four lanes extract out of a v128\nlocal and sum to f64.  The product's local rides the existing\n*f64-slots* channel encoded as (- -1 slot), so locals-decl types it\nv128 with no new plumbing.  A member of the f64 context on both\nsides: it composes into fl expressions unboxed and its result feeds\nf64 slots.  Quaternion dots (nlerp's cosine) and plane tests are\nthe customers.  Fixpoint holds, 166 green.",
          "is_bot": false,
          "headline": "%f32x4-dot: four lanes multiplied and summed to one flonum",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T09:37:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4272991a800f0dfad7a241046722187f7fa6468d",
          "body": "…ests\n\nThree refinements to the compiler's raw-f64-slot analysis:\n- capture analysis is per binding now, not per body: a loop in the\n  let body no longer denies f64 slots to bindings the loop never\n  mentions (lambda-captures? replaces the all-or-nothing\n  contains-lambda? gate);\n- an if with two fl\n[…]\n), 166 tests green.  V8 benchmarks sit\ninside noise: the boxes this erases were already nearly free there\n(generational GC); the win is less garbage per frame and JSC, whose\nallocator is the slow one.",
          "is_bot": false,
          "headline": "The f64 context widens: per-binding capture, flonum ifs, unboxed fl t…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T09:33:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa2aa265394fb277bc6bcd4139ed778c9843be51",
          "body": null,
          "is_bot": false,
          "headline": "README: (web canvas) gets its own entry in the Web list",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T09:18:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9da0c549ae93b25c0466a4ed2459f0a669880e45",
          "body": "The measureText measurer was the only nested library; the name now\nleaves room to grow into the general canvas library.  Exports\nunchanged; typeset core stays DOM-free.",
          "is_bot": false,
          "headline": "(web typeset canvas) flattens to (web canvas); v1.3.3",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T09:16:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b3a58d6e609069b2b0ecd67e0b4eea0fb8c2f7a",
          "body": null,
          "is_bot": false,
          "headline": "README: (web sexpr)/(web rpc) now carry flonums as #f8 IEEE base64",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T08:42:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d3c34fbe7e64dc3c2a74fa2846d564778f0bc41",
          "body": null,
          "is_bot": false,
          "headline": "Rebuild example wasm against the optimization batch",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T08:38:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efd6e7f444586e9060f1ffeca4aa59cd1a10457c",
          "body": "gl-gpu-timer! turns on EXT_disjoint_timer_query_webgl2 once; every\nreplay then brackets itself in a query from a small recycled pool,\nand gl-gpu-ms surfaces the newest available result (a few frames\nbehind, as GPU timers are; -1 until then, disjoint results\ndiscarded).  The HUD prints it beside the \n[…]\nPU frame time -- '8.3\nMS  4.1 GPU  ...' -- and hides the segment where the extension is\nmissing (Safari).  Nothing is instrumented: the query wraps exactly\nthe one bridge call the frame already makes.",
          "is_bot": false,
          "headline": "GPU frame time in the stats HUD: TIME_ELAPSED queries around each replay",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T08:35:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e94d05732aab0db463957aa56b924995f1596ecc",
          "body": "(gfx gl) grows the TEXTURE_2D_ARRAY resource family --\ngl-texture-array! (immutable texStorage3D storage),\ngl-texture-layer! (a canvas/bitmap into one layer),\ngl-texture-layer-data! (raw RGBA bytes out of staging) -- and\nopcode 41, cmd-bind-texture-array!.  (gfx fx) wraps the slot in\nfx-texture-arra\n[…]\nayer)) and a\nper-instance layer index is just another i_* attribute: instanced\ndraws stop splitting on texture.  ESSL 3.00 (the forms pass through\nthe 300 renderer; declare precision for the sampler).",
          "is_bot": false,
          "headline": "Texture arrays: many images behind one bind, layers as instance data",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T08:29:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ec778f1d5cffb239afcc3435d4880e50e40279cb",
          "body": "Mirror igropyr's #f8 flonum wire form: flonum <-> 8 IEEE-754 LE bytes <-> base64 via a JS DataView (hardware IEEE, byte-identical to Chez's bytevector-ieee-double-*), so doubles -- inf and nan included -- cross the RPC bit-exact instead of through lossy decimal printing.",
          "is_bot": false,
          "headline": "(web sexpr): decode/encode flonums as #f8\"<IEEE base64>\"",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T08:25:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "295b41e0ecb425c77b4638bd4e7edf4e6f5230f3",
          "body": "(gfx mesh) gains mesh-write-f16!/mesh-vertex-bytes-f16: the same\ninterleaved pos+normal stream at two bytes a component -- stride 12\ninstead of 24.  The encoder is pure Scheme over the f32 bit pattern\n(a value bounces through four scratch bytes of staging to expose\nits bits): round-to-nearest with c\n[…]\nribPointer with\nHALF_FLOAT, the GPU converts on fetch.  Tests: the box roundtrips\nthrough an independent decoder bit-exactly, plus known patterns for\nrounding, f16 max, overflow and subnormal corners.",
          "is_bot": false,
          "headline": "Half-precision vertex streams: mesh-write-f16! + HALF_FLOAT attributes",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T08:22:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b041eb4f777c87abce38b60a01fcb0c8b966182",
          "body": "…ace upload\n\n(gfx mat) gains m4s-tqs! -- the T x R(quat) x S every glTF node\nrebuilds per frame, written straight into staging with no\nconstructor chain.  Assets with skins get a resident arena at parse\ntime: a topological node order (parents first, no recursion), a\nglobals block the locals compose \n[…]\nit, so the Fox's 24 joints stopped costing 24\nboxed multiplies plus 384 streamed floats a frame.  Tests: tqs\nclosed form against the constructor chain, palette f32-for-f32\nagainst gltf-joint-matrices.",
          "is_bot": false,
          "headline": "Skeletons go SIMD-resident: closed-form locals, staged palette, in-pl…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T08:16:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7b601545fa5efd453a131e58d08032f0315f2fda",
          "body": "The four scene programs (lit, tex, pbr, instanced) turn ESSL 3.00\nand read vp, light direction, ambient and eye from a std140 Env\nblock at binding 0: one 96-byte cmd-ubo-data! per frame replaces\nthe per-program u_vp/u_light/u_ambient/u_eye sends.  Shaders keep\ntheir variable names -- envify is a pur\n[…]\n), so\nmesh.ss's neutral forms still render ESSL 1.00 for direct users.\nu_ambient packs into u_light's fourth float, u_eye follows at 80.\nScene scenes now need WebGL 2 (the default context already is).",
          "is_bot": false,
          "headline": "Scene frame globals ride one Env uniform block",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T08:08:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3bc0b6ce1cda1552f6dbfc5a288e4ac63e75e9c3",
          "body": "Instance groups compose into candidate slots four at a time; the\ntransformed centers come off each slot's columns as one f32x4 scale\nand three axpys, lie down SoA beside the radii, and every frustum\nplane then tests all four spheres in five SIMD instructions\n(xs*nx + ys*ny + zs*nz + rs + d, positive\n[…]\nown in place (a chunk with nothing culled\nmoves nothing -- moves are four scale-by-one quads).  Test: seven\ninstances with kills on both sides of the chunk boundary draw as\nexactly the four survivors.",
          "is_bot": false,
          "headline": "The instanced cull goes SIMD: four spheres a plane test",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T07:58:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "75ae49643952171b2243d93bebd0ce637a435ab6",
          "body": "…ar slab sweep\n\n(gfx mat) grows v3-set!/copy!/add!/sub!/scale!/cross!/normalize! --\nsame math, results land in caller-owned vectors -- and\nsphere-in-frustum-xyz?, the cull test with the center unboxed.\n(gfx scene) culls both draw paths through it (no boxed center or\nm4-transform per node); (gfx coll\n[…]\nodule\nscratch, and character-move! reuses one motion vector and a constant\ndown probe.  Tests: aliasing-safe v3! ops, xyz/boxed frustum\nagreement, slide determinism with the caller's motion untouched.",
          "is_bot": false,
          "headline": "v3 hot paths stop allocating: destructive v3 ops, unboxed culls, scal…",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-14T07:52:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "507ea3f614284c59bee827fc44c99e3acb92419f",
          "body": "Breaking namespace rename, done now while there are no users to break:\n- 16 rendering/game libs move to lib/gfx/: gl glsl wgsl gpu fx mat mesh\n  scene post ibl sdf gltf sprite stats collide xr\n- (web audio) becomes (aud sfx) in lib/aud/ — the audio namespace is\n  its own, ready for future members li\n[…]\n css react\n  reactive typeset scroll sexpr rpc fetch json ws sse\n- README regrouped into Web / Graphics & Games / Audio sections\n- all examples, tests and bench renamed and recompiled; 166 tests green",
          "is_bot": false,
          "headline": "Split (web ...) into (web ...), (gfx ...) and (aud sfx); v1.3.2",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T23:58:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ab4f96708b38a6f0bc378125b2cd554aea9dc19",
          "body": "Optimizations 2 and 4 landed without their entries -- (web mat)\nnow documents the staging-resident matrix handles and the\nthree-word address upload, (web fx) the per-program last-value\nuniform cache and its one rule.",
          "is_bot": false,
          "headline": "README: the m4s family and the uniform cache",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T23:23:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2a0fd94f027a61b631bc71326a33d516dbd2e52",
          "body": "Scene instancing, staging-resident m4s matrices, the uniform\ncache, lod containers, the cached shadow map pattern, and WebGPU\nrender bundles -- the optimization round, since 1.3.0.",
          "is_bot": false,
          "headline": "v1.3.1",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T23:19:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13726c155c3b713585b8d7a37b3ba6aeed3297e9",
          "body": "gpu-bundle! freezes the commands encoded since gpu-begin! into a\nGPURenderBundle -- the same staged words, decoded once at record\ntime by a bundle encoder (draws and their state only; clear,\nwrites and compute are the frame's business).  gpu-execute! then\nreplays the whole thing from inside the brow\n[…]\nat\nall: our command buffer concept, sunk one level down into the API.\n\ngpu-torus records its draw once at attach; every frame after is\nclear + one 128-byte uniform write + executeBundles.  Suite: 166.",
          "is_bot": false,
          "headline": "(web gpu): render bundles (optimization 5)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T23:18:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2508dbff2b7f1fd51debf255e23820fddb76c437",
          "body": "The static world casts shadows now, and the cache IS the point:\ncrates, walls and floor never move, so their depth map (a\n1024x1024 depth-only target from the light's orthographic view)\nbakes exactly once, on the first frame, and every later frame just\nsamples it -- a whole render pass whose amortiz\n[…]\nith a\n3x3 PCF; the orbs receive shadow but don't cast (they're made of\nlight).  The one-time bake is the honest shape of shadow caching:\na dirty flag would re-bake on change, and nothing here changes.",
          "is_bot": false,
          "headline": "arena: shadows for free -- the cached map (optimization 3)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T23:15:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "503432048157c0d3a23d274c61f25dcd28c1846d",
          "body": "(lod (@ (switch d1 d2 ...)) mesh1 mesh2 ...) holds detail levels of\none thing.  Each frame the probe child's staged matrix places it,\nthe eye's distance walks the switch list, and only the chosen\nlevel draws -- through either path, since both the single-node\ndraw and the instanced fill ask -lod-active? first.  The mesh\ngenerators' segment parameters make the levels free to author:\n(sphere 1.0 32 16) up close, (sphere 1.0 8 4) far away.",
          "is_bot": false,
          "headline": "(web scene): lod containers (optimization 6)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T23:02:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9955a23b5e6697c6d4ffb2f4877c4afa54c47500",
          "body": "Meshes with the same literal geometry spec now share a single\nupload -- the geo cache keys on (layout . spec) -- and lit nodes\nsharing one, two or more, become an instanced group: the model\nmatrix rides four vec4 instance attributes with the color as a\nfifth, so the whole group is ONE drawElementsIn\n[…]\nnt.  Frustum\nculling moved with it: the bounding sphere reads its center off\nthe staged matrix, and a culled instance simply never joins the\nbuffer.  Singles, tex and pbr nodes keep the per-node path.",
          "is_bot": false,
          "headline": "(web scene): same geometry, one draw (optimization 1)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T22:59:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1dfa02f2e7c6fff6803a973e3b22a51bf78fe501",
          "body": "The copy tax refunded: an m4s is a byte address of sixteen f32 in\nthe linear memory.  m4s-mul! multiplies entirely in SIMD -- scalars\nload straight from staging through the f64 context, no boxed reads\nin, no boxed vector out -- and m4s-trs! composes the whole\nT*Ry*Rx*Rz*S in closed form (verified si\n[…]\nps the re-send -- GL\nuniform state is persistent, so a steady u_light costs one send,\never.  The cache cell is reused, so it allocates once; matrices\nchange every frame and stay uncached.  Suite: 166.",
          "is_bot": false,
          "headline": "m4s staging matrices, and the uniform cache (optimizations 2 + 4)",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T22:47:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "107d56640f9d956c8da3e18784ac66841e6995ff",
          "body": "The cube-map sea becomes a planar reflection (the fx-water move):\npass 1 renders sky and ball from the camera mirrored about the\nsurface into a texture; each sea fragment projects itself through\nthat mirrored camera, wave-shifts the lookup by its sine normal,\nand Fresnel-blends the reflection over t\n[…]\n same swell as the\nclouds, with the sun's glitter path on top.  In return the ball's\nown below-horizon rays wobble with the time, so the sea band it\nreflects moves like water instead of sitting still.",
          "is_bot": false,
          "headline": "fx-skybox: the sea mirrors the ball, and the ball's waterline lives",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T22:32:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "afe36c089f2ff9e0a412e7dcca149088a6a96822",
          "body": "The bake grows real weather: a deep zenith washed white toward the\nhorizon, cumulus where four octaves of 3D value noise rise past\ntheir threshold -- noise over the view DIRECTION, so the clouds\ncross the cube's face seams without an edge -- plus thin high\ncirrus, sunlit tops and shaded bellies, at \n[…]\ne normal, each\nfragment reflects the eye ray into the SAME cube map -- the clouds\nride the swell for free -- Fresnel-blended over the deep, with the\nsun's glitter path on top.  The mirror ball floats.",
          "is_bot": false,
          "headline": "fx-skybox: cumulus in the sky, and the ground becomes the sea",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T22:27:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36a488c8f8b98a7aead13a7aa9e1299303943368",
          "body": "Bump to 1.3.0 (SIMD m4, the WebGPU backend + WGSL, WebXR, deferred\n/ PCSS / SSR / DoF / grade / FXAA, the character controller and\nbroadphase, SDF text, the stats HUD -- all since 1.2).\n\nREADME gains the four library entries that were missing their own\nbullet: (web html) and (web css) (the string-re\n[…]\n, (web wgsl) (promoted from a line inside\nthe gpu entry -- one shader source, three APIs), and (web sexpr)\n(the wire codec (web rpc) now serializes through).  Every file in\nlib/web/ is now documented.",
          "is_bot": false,
          "headline": "v1.3.0; README: the libraries added since 1.2",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T21:31:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "046866531636f7a8b10fc65677b5a2e33bcef0fd",
          "body": "The command buffer already knows everything a HUD wants: draws\ncount as they encode (one increment in each cmd-draw-* -- the new\ncmd-draws reads it back, cmd-begin! resets it) and the frame's\ncommand bytes ARE the write cursor.  make-stats/stats-draw! put a\npanel on that: average frame time and FPS \n[…]\ns and kilobytes -- one sprite batch, re-typeset four times a\nsecond, encoded after the numbers are read so it never counts\nitself.  fx-deferred wears it: 21 draws, 4.3 KB, said the corner.\nSuite: 166.",
          "is_bot": false,
          "headline": "(web stats): the performance HUD, numbers for free",
          "author_name": "guenchi",
          "author_login": "guenchi",
          "committed_at": "2026-07-13T21:19:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 1,
      "commits_last_year": 251,
      "latest_release_at": "2026-07-16T22:52:09Z",
      "latest_release_tag": "1.5.2",
      "releases_from_tags": false,
      "days_since_last_push": 2,
      "active_weeks_last_year": 2,
      "days_since_latest_release": 7,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "goeteia",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "scheme",
            "webassembly",
            "wasm",
            "wasm-gc",
            "compiler",
            "self-hosting",
            "r6rs",
            "lisp"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/goeteia",
          "is_deprecated": false,
          "latest_version": "1.5.3",
          "repository_url": "https://github.com/guenchi/Goeteia",
          "versions_count": 17,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2369,
          "first_published_at": "2026-07-12T12:45:16.280000Z",
          "latest_published_at": "2026-07-18T16:11:37.290000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 4,
      "stars": 58,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-12",
            "count": 2
          },
          {
            "date": "2026-07-16",
            "count": 2
          }
        ],
        "complete": true,
        "collected": 4,
        "total_forks": 4
      },
      "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": [],
      "largest_source_bytes": 9434,
      "source_files_sampled": 11,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "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": [
        "npm"
      ],
      "dependencies": [],
      "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": 2,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "guenchi",
          "commits": 251,
          "avatar_url": "https://avatars.githubusercontent.com/u/25831936?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 0,
            "reason": "binaries present in source code",
            "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": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "5b989071e37e24a13172483145f1b88908c52184",
        "ran_at": "2026-07-24T00:51:14Z",
        "aggregate_score": 1.6,
        "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-19T18:39:01Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-17T11:47:59Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/guenchi/Goeteia",
    "host": "github.com",
    "name": "Goeteia",
    "owner": "guenchi"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 50,
      "inputs": {
        "security": 16,
        "vitality": 67,
        "community": 44,
        "governance": 53,
        "engineering": 58
      },
      "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": 55,
            "inputs": {
              "commits_last_year": 251,
              "human_commit_share": 1,
              "days_since_last_push": 2,
              "active_weeks_last_year": 2
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "2/52 weeks with commits",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "251 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 251
                    }
                  }
                ],
                "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": "good",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 84,
            "inputs": {
              "releases_count": 1,
              "latest_release_tag": "1.5.2",
              "releases_from_tags": false,
              "days_since_latest_release": 7,
              "mean_days_between_releases": null
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "1 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "cadence unknown (single release)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence_unknown",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 44,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "forks": 4,
              "stars": 58,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "58 stars",
                "points": 28.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 58
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "4 forks",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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
              }
            ]
          },
          {
            "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": 56,
            "inputs": {
              "packages": [
                "goeteia"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2369
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,369 downloads/month across npm",
                "points": 45,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2369,
                      "ecosystems": "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": 53,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "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": 48,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 1
            },
            "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": "2/3 decided PRs merged",
                "points": 25.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 3
                    }
                  }
                ],
                "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": 68,
            "inputs": {
              "followers": 448,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "guenchi",
              "public_repos": 161,
              "account_age_days": 3444
            },
            "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": "448 followers of guenchi",
                "points": 19.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 448,
                      "login": "guenchi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "161 public repos, account ~9 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 161
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 9
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "goeteia"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "17 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 58,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "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": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "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": [
                "scheme",
                "scheme-compiler",
                "wasm",
                "3d-game",
                "3d-graphics"
              ],
              "has_wiki": true,
              "homepage": "https://goeteia.dev",
              "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://goeteia.dev",
                "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": "critical",
        "name": "Security",
        "value": 16,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 16,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 1.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 0,
                "status": "missed",
                "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is 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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "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": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 35,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.68,
              "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": "68 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 36.3,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 68,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "critical",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 24,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Scheme",
              "largest_source_bytes": 9434,
              "source_files_sampled": 11,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Scheme without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Scheme"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/11 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 11,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "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-24T00:51:19.271895Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/g/guenchi/Goeteia.svg",
  "full_name": "guenchi/Goeteia",
  "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 Statistikennpm.