Öffentliches Register
Software-GesundheitsberichtSchema 0.31.0 · Metriken 2.5.0 · 2026-08-05 17:52 UTC

gregkwaste / NMSMV

C#Keine Lizenz erkannt★ 47 Sterne⑂ 7 Forksseit Aug. 2020Auf GitHub ansehen ↗
ArtDesktop-AnwendungBibliothekwie das ermittelt wird

gregkwaste/NMSMV erreicht einen Gesundheitsindex von 21 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei AI Readiness (42/100) ab, am schwächsten bei Security (17/100). Zuletzt vor 139 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

21
gesamt / 100
Gefährdet

Software-Gesundheitsindex

Metriken werden auf einer standardisierten Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr gewichtetes Mittel, kalibriert auf die Verteilung des öffentlichen Registers, sodass die Stufen Perzentilbedeutung tragen; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze Gefährdet von 34.

21
Außergewöhnlich93-100Die Spitzengruppe des Registers (≈ obere 5 %); erfüllt im Wesentlichen alle geprüften Kriterien
Exzellent80-92Durchgehend stark; geringfügige Lücken
Gut65-79Gesund; Lücken sind begrenzt und beherrschbar
Mittel50-64Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Schwach35-49Wesentliche Schwächen in mehreren Bereichen
Gefährdet20-34Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-19Schwerwiegende 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.

Der gewichtete Gesamtwert 27 wird auf der veröffentlichten Indexskala auf 21 kalibriert (Register-Kalibrierung 2026-08-02).

Eigentümerschaft

Greg KasapidisPersönliches Konto
18 Follower24 öffentliche Reposseit Mai 2014

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.

Metriken nach Kategorie

Vitalität

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

30Gefährdet · 21 % des Gesamtindex
Wie die Bewertung erfolgt
9.9/36Push-Aktualität — letzter Push vor 139 Tagen
0.7/36Commit-Rhythmus — 1/52 Wochen mit Commits
2.7/18Commit-Volumen — 1 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Verwendete Eingangsdaten
commits_last_year1
human_commit_share1
days_since_last_push139
active_weeks_last_year1
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 13 Releases veröffentlicht
16.2/36Release-Aktualität — letztes Release vor 350 Tagen
12.6/27Release-Rhythmus — ein Release etwa alle 145,5 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count13
latest_release_tagv0.93.1-pre
releases_from_tagsnein
days_since_latest_release350
mean_days_between_releases145,5

Community & Verbreitung

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

32Gefährdet · 17 % des Gesamtindex
Wie die Bewertung erfolgt
27/60Stars — 47 Stars
6.5/25Forks — 7 Forks
4.7/15Watcher — 8 Watcher
Verwendete Eingangsdaten
forks7
stars47
watchers8
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
0/22.5Lizenz — keine Lizenzdatei erkannt
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licensenein
readme_badges3
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
readme_badge_servicesshields.io
has_pull_request_templatenein

Nachhaltigkeit & Governance

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

35Schwach · 23 % 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
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
28/42Issue-Lösungsquote — 67 % der Issues geschlossen
0/30PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/13Newcomer PR acceptance — kein PR eines Erstbeitragenden in 30 Tagen entschieden
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues5
closed_issues10
prs_merged_7d0
prs_decided_7d0
prs_merged_30d0
prs_decided_30d0
issue_closed_ratio0,667
closed_unmerged_prs0
first_time_authors_30d0
first_time_prs_merged_30d0
first_time_prs_decided_30d0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): PR-Annahme, newcomer_pr_acceptance. 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
9.2/25Reichweite des Inhabers — 18 Follower von gregkwaste
22.2/25Kontohistorie — 24 öffentliche Repos, Kontoalter ca. 12 Jahre
Verwendete Eingangsdaten
followers18
owner_typeUser
is_verified
owner_logingregkwaste
public_repos24
account_age_days4.473
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

17Kritisch · 19 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
0/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_testsnein
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

40Schwach
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirnein
has_descriptionnein

Sicherheit

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

17Kritisch · 16 % des Gesamtindex

Sicherheitslage

17Kritisch
Wie die Bewertung erfolgt
5.2/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/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Lizenz — license file not detected
0/7.5Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
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 — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate1,7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, pinned_dependencies, 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? Trägt ein bewusst kleines Gewicht (4 %): Agenten-Tooling ist ein echtes Pflegesignal, doch ein Repository ohne jedes Signal kann weiterhin 100/100 erreichen.

42Schwach · 4 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
35.2/40Lesbare Commit-Historie — 66 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,66
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — SimpleTextureRenderer/SimpleTextureRenderer.csproj, TextureMixer/TextureMixer.csproj, TextureRenderer/TextureRenderer.csproj (Toolchain-Konvention, kein Task-Runner)
0/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — C# (statisch typisiert)
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_testsnein
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsSimpleTextureRenderer/SimpleTextureRenderer.csproj, TextureMixer/TextureMixer.csproj, TextureRenderer/TextureRenderer.csproj, Viewer_Unit_Tests/Viewer_Unit_Tests.csproj, WPFModelViewer/WPFModelViewer.csproj
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
45/45Typprüfbarer Code — C# (statisch typisiert)
54.3/55Handhabbare Dateigrößen — 1/76 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageC#
largest_source_bytes80.963
source_files_sampled76
oversized_source_files1

Eckdaten

47GitHub-Sterne
1Mitwirkende
1Commits, letzte 12 Monate
139Tage seit letztem Push
13Releases
1Bus-Faktor
5offene Issues
NuGetPaket-Ö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 ★ / 7 ⇿
0Sterne
7Forks
8Releases

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.

1234567712021-042022-102024-05
Major 0Minor 1Patch 6

Jeder Punkt umfasst 3 Tage.

OpenSSF Scorecard 1.7 / 10
1.7Gesamtwert

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-08-05 17:52 UTC

7Binary-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
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 13
RegistryPaketVersionsvorgabeManifest
NuGetOpenTK3.1.0SimpleTextureRenderer/SimpleTextureRenderer.csproj
NuGetAssimpNet5.0.0-beta1WPFModelViewer/WPFModelViewer.csproj
NuGetCostura.Fody5.8.0-alpha0098WPFModelViewer/WPFModelViewer.csproj
NuGetFody6.8.1WPFModelViewer/WPFModelViewer.csproj
NuGetGameloop.Vdf0.6.2WPFModelViewer/WPFModelViewer.csproj
NuGetMathNet.Numerics5.0.0WPFModelViewer/WPFModelViewer.csproj
NuGetMicrosoft.CSharp4.7.0WPFModelViewer/WPFModelViewer.csproj
NuGetNewtonsoft.Json13.0.3WPFModelViewer/WPFModelViewer.csproj
NuGetNLog5.3.2WPFModelViewer/WPFModelViewer.csproj
NuGetOpenTK.GLWpfControl4.2.3WPFModelViewer/WPFModelViewer.csproj
NuGetOpenTK4.8.2WPFModelViewer/WPFModelViewer.csproj
NuGetSystem.Drawing.Common8.0.7WPFModelViewer/WPFModelViewer.csproj
NuGetWindowsAPICodePack8.0.4WPFModelViewer/WPFModelViewer.csproj
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": {
    "icon": {
      "bytes": 380127,
      "width": 1024,
      "height": 1024,
      "rejected": [],
      "collected": true,
      "media_type": "image/png",
      "source_url": "https://i.imgur.com/hdBRZFL.png",
      "source_type": "readme",
      "content_hash": "eaafc27b903279daedd5056c96818d78e1b768292c75d93d4f946177d65611e5",
      "candidates_considered": 1
    },
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 11780,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "C#": 840084,
        "GLSL": 71903,
        "Python": 1162
      },
      "pushed_at": "2026-03-18T22:56:14Z",
      "created_at": "2020-08-21T09:06:19Z",
      "owner_type": "User",
      "updated_at": "2026-03-26T16:11:57Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": null,
      "primary_language": "C#",
      "significant_languages": [
        "C#"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Greg Kasapidis",
      "type": "User",
      "login": "gregkwaste",
      "company": null,
      "location": "United Kingdom",
      "followers": 18,
      "avatar_url": "https://avatars.githubusercontent.com/u/7515235?v=4",
      "created_at": "2014-05-07T17:44:51Z",
      "is_verified": null,
      "public_repos": 24,
      "account_age_days": 4473
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.93.1-pre",
          "kind": "prerelease",
          "published_at": "2025-08-20T08:14:37Z"
        },
        {
          "tag": "v0.91.3-pre",
          "kind": "prerelease",
          "published_at": "2024-08-01T23:57:27Z"
        },
        {
          "tag": "v0.91.2",
          "kind": "patch",
          "published_at": "2023-09-24T01:37:00Z"
        },
        {
          "tag": "v0.91.1",
          "kind": "patch",
          "published_at": "2022-12-01T17:53:54Z"
        },
        {
          "tag": "v0.91.0",
          "kind": "minor",
          "published_at": "2022-11-06T12:56:26Z"
        },
        {
          "tag": "v0.90.7-hotfix",
          "kind": "prerelease",
          "published_at": "2022-07-24T03:49:22Z"
        },
        {
          "tag": "v0.90.7",
          "kind": "patch",
          "published_at": "2022-07-23T15:04:19Z"
        },
        {
          "tag": "v0.90.6",
          "kind": "patch",
          "published_at": "2022-07-18T07:52:43Z"
        },
        {
          "tag": "v0.90.4",
          "kind": "patch",
          "published_at": "2022-02-23T14:19:16Z"
        },
        {
          "tag": "v0.90.3",
          "kind": "patch",
          "published_at": "2022-01-18T15:12:13Z"
        },
        {
          "tag": "v0.90.1",
          "kind": "patch",
          "published_at": "2021-01-13T13:43:31Z"
        },
        {
          "tag": "0.90.0",
          "kind": "minor",
          "published_at": "2020-08-29T16:07:27Z"
        },
        {
          "tag": "v0.89.4",
          "kind": "patch",
          "published_at": "2020-08-21T18:14:44Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ee2ed17e79ff82ec4cfd069f33fcd2234e443e03",
          "body": null,
          "is_bot": false,
          "headline": "Prerelease version update + libmbin v5.74",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2025-08-20T08:00:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d95401e097c7411214aa7788c0ffa98d9018d369",
          "body": "- Disabled reference loading. References now need to be manually loaded (Green nodes on the scenegraph represent Reference nodes)\n- Added support for new texture formats (ATI1)\n- Minor UI updates for better camera settings control",
          "is_bot": false,
          "headline": "Updated Codebase for NMS v5.7x",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2025-07-16T01:54:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd4c6fec336a818f73760744a4a64876f3f20bca",
          "body": "- Added support for NMS 5.0 geometry model formats\n- Added support for GROUP node types (interpreted as locator objects)\n- Added a very preliminary implementation of a scene exporter to EXML (only exports hierarchy information for now)\n- Repaired proc gen model generator\n- Upgraded project to Net 8",
          "is_bot": false,
          "headline": "NMS 5.0 update",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2024-08-01T23:20:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53ffee760cc1a79f28213f24c153ea34123331ba",
          "body": "- Fixed a small bug related to the incorrect interpolation between rotation quaternions\n- Added a dynamic NMS archive parsing mechanism. Archives are now locked only during the loading process\n- Repaired the procgen button. The tool is able to create random procedurally generated models (excluding pose customisation for now)",
          "is_bot": false,
          "headline": "BugFixes and ProcGen",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2024-07-30T23:21:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9006304c6d2c14fbb725e21e60ef3289794865e",
          "body": null,
          "is_bot": false,
          "headline": "Dependencies update + new Parser for NMS v5.0",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2024-07-29T18:58:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e96c9b4c107c55c68f7118bfc50af167e9ab57c9",
          "body": null,
          "is_bot": false,
          "headline": "Removed NMS template field from the model class",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2023-09-24T01:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fec012b25110cd5f1a99b25fc8d3a39da4099787",
          "body": "- Fixed issue with insufficient joint arrays\n- Fixed issue with duplicated mesh hashes",
          "is_bot": false,
          "headline": "Bug fixes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2023-09-24T01:10:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23a9076e2c5a00f2b1c1d2056447d45d467d1149",
          "body": null,
          "is_bot": false,
          "headline": "Bugfixes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2023-07-31T20:48:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2ddfdb77501e95494e4c59a90aaf065dbe898be",
          "body": "Fixed an issue with wrong nms path detection when the game is installed in the default steam directory",
          "is_bot": false,
          "headline": "Fixed a bug with wrong nms path calculation",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-12-01T17:50:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a68e2e91b3d99a5b537d11614eb0c4033611bc0e",
          "body": null,
          "is_bot": false,
          "headline": "Added support for default Anims",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-11-26T16:05:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "375476049bc8b7a1a74130fa5dab42971db5e828",
          "body": "Camera movement is based on yaw/pitch. No interpolation hapenning, no polling thread. Seems much smoother.",
          "is_bot": false,
          "headline": "Addressed choppy camera movement.",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-11-12T20:50:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1b73d6fba18b8f2308095969db538a4e1cff970",
          "body": "- UI and mouse capturing bug fixes.",
          "is_bot": false,
          "headline": "Removed WinForms Dependency",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-11-06T12:44:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b93cbc70661fcb633a49222cccba1b788dc8749",
          "body": null,
          "is_bot": false,
          "headline": "Fixed a bug on default browser invoke",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-11-06T06:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba0f2ed899ac804bd3566e35edece0165ea4c319",
          "body": null,
          "is_bot": false,
          "headline": "Updated Donation Link",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-11-06T06:13:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91957befea69f7dfaf74c7068e95911a5bb4db76",
          "body": "Bumped version to 0.91 and fixed libmbin updater to grab the net5.0 assembly",
          "is_bot": false,
          "headline": "Version update+",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-11-06T05:46:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e5c7f5b6123f43e4ad06aa7f50aac976359d99d",
          "body": "Upgraded OpenTK 3->4\nMigrated to Net6.0\nUsing net5.0 version of the libmbin",
          "is_bot": false,
          "headline": "Dependency Upgrade",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-11-05T20:08:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb051bbe9a827011b19a89a29b74e7ea7ab4456e",
          "body": "- Cleaned up rendering options control\n- Fixed issue with null skinning matrices\n- Fixed an issue with camera reset position",
          "is_bot": false,
          "headline": "Bugfixing",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-07-24T14:31:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69e136c780cc4aebfe11a76c1cbd300ecb91b141",
          "body": "- Set HDRExposure to 0.5 by default\n- Fixed issue with overriden user camera settings after a new import.\n- Added more error logging when libmbin fails to decompile a file",
          "is_bot": false,
          "headline": "Bug fix",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-07-23T22:57:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "402ff46119ff8137bc4d6d4f08d4dca6bf827e4c",
          "body": "- Updated libmbin version\n- Fixed an issue with new not yet supported samplers\n- Improved libmbin update mechanism\n- All viewport settings are saved in the settings.json file.",
          "is_bot": false,
          "headline": "Endurance update + Bug Fixes + QOL",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-07-23T14:57:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "233921162c0a685f4e3e259ec7d4af0a93ce87ed",
          "body": "- Updated several dependencies",
          "is_bot": false,
          "headline": "Fixed Steam library search",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-07-18T07:51:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4aa4d5d562e4961c8bb2186d5b8f9a8c8e0d9ea8",
          "body": null,
          "is_bot": false,
          "headline": "cleaned up readme file",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-07-16T15:32:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d96ce9e6f2cfcd13100625764f355148943fe37d",
          "body": "Also fixed an error regarding inconsistent input skinning data.",
          "is_bot": false,
          "headline": "New version. Settings NMS path request. Added new light attenuation type",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-07-16T15:23:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42dbc7c984a8fffd9851c4439d3396e7622878c5",
          "body": "The viewer now is logging EVERYTHING supposed to be printed out.\nCode was adapted to handle the modified physics component struct.",
          "is_bot": false,
          "headline": "Upgraded Logging, libMBIN upgrade",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2022-05-11T07:00:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1d538dfd14587159997b682da10d9428849cc4e",
          "body": "…UTOUT flag during rendering",
          "is_bot": false,
          "headline": "Added fixes for the VBSKINNED flag as well the handling of the ALPHAC…",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2022-02-27T21:27:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fa024aed191ac54435e20c90f3c94a468c74a32",
          "body": null,
          "is_bot": false,
          "headline": "Cleared up some settings window descriptions",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2022-02-23T14:00:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8505384d7f7e9ea7b56205e73e2611a92ab88cb",
          "body": "… completely wrong.",
          "is_bot": false,
          "headline": "Proper fix for parsing the TkMeshMetaData class. The previous one was…",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2022-02-23T13:34:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3738b5c225562c48b9faf22d5159e7af03de4cc6",
          "body": "…s that may contain spaces.",
          "is_bot": false,
          "headline": "Adapted code to Sentinel Update. Fixed a bug related to gamedata path…",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2022-02-23T13:14:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5a91cfb71b000d7d8f27136ade56aba5d817816",
          "body": null,
          "is_bot": false,
          "headline": "Updated platform target to x64",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2022-01-18T15:09:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "464b94474b50118678883685868b7c5d04240e51",
          "body": "Also updated framework version and  app version\n* Latest libmbin is included.\n* Problematic shaders are fixed",
          "is_bot": false,
          "headline": "Updated to support Latest Mbin Version",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2022-01-18T14:59:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa07c5a58ce8bbf8ff857b95c4d45c2d2d3f6341",
          "body": "* Added UI components for testing that are enabled only in debug mode. they should not affect the tool's release version\n* Changed default exposure to 0.005 to kinda match the game's lighting environment\n* A lot of work on underlying systems to support game components such as ActionTriggers, Physics\n[…]\n Lod filtering to children of Lod meshes\n* Added error catchers during material shader compilation for debugging purposes\n* Included latest libMBIN and libPSARC libraries and updated version to 0.90.1",
          "is_bot": false,
          "headline": "Performance + Bug Fixes + New Features",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2021-01-13T12:56:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "281a4c911c90a0c4e56c8ac7daaa41131945deff",
          "body": "-We now got an engine object yaaaaay\n-Fixed a bug during animation interpolation\n-Fixed a bug during Camera interpolation\n-A bit of experimentation with poses.\n-Basic infrastructure for ECS systems is implemented.",
          "is_bot": false,
          "headline": "Action system Infrastructure + Code Organization",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-09-02T08:23:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdcdc89723c4d1b6a23872c02f8583564d2fd9b0",
          "body": "test options are added programmatically only on the debug version\nupdate changelog\nupdated version on tool and build tool\nremoved unecessary packages",
          "is_bot": false,
          "headline": "Big Fixes on Release version",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-29T15:57:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b89ad970ebd63f72d096613f5c0edd7bc1cda181",
          "body": null,
          "is_bot": false,
          "headline": "Removing old Imaging class",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-29T13:51:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5bed21f8269775e757cc2d7bd4ca9a603e97607",
          "body": "-Finished the greatest part of a custom SDF text renderer. Droid and Segoe fonts are now embedded as resources in the app. External references to QFont and SharpFont are completely removed.\n- Fixed a bug that prevented the settings form to be re-opened. \n- Core Engine code organization into separate\n[…]\ny smoother compared to the past\n- Fixed a bug related to repeated rendering of locator meshes\n- Migrated app to OpenGL 4.6 core profile. Rendering code as well as all the related shaders were updated.",
          "is_bot": false,
          "headline": "Bunch of updates and bug fixes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-29T13:50:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d9518ac676a5ed2cf0d9030522f1b1c9bf28a90",
          "body": "LOD filtering This option is enabled by default. Minor updates to the readme and a bit of code reorganization",
          "is_bot": false,
          "headline": "Brought Back LOD level filtering.",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-23T18:29:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11dbd60d2fa6d06a1ac47c5fdd59d1c83bc839bd",
          "body": null,
          "is_bot": false,
          "headline": "Added build script",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-23T16:37:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae0b3e5fc0f6a6f673a7bd8ac725d9570aa18966",
          "body": "latest dll is fetched from github.",
          "is_bot": false,
          "headline": "Added libMBIN update functions",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-22T17:11:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "729bd71b5a9594876de4ae99f07c1695ddad23a6",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Greg Kasapidis",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-22T07:20:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69c7fa0f1c6dd2baebc737679aa80f07de82102a",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Greg Kasapidis",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-22T07:19:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11212e3ecba6bb1fd48ad955f3ad0119f4b0235b",
          "body": "Fixed links in about window. Improved readme and fixed the layout of the about window",
          "is_bot": false,
          "headline": "Reference updates",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-22T07:15:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "178d5089ff38951b6e3ab1f5a62bfeedccc9d4be",
          "body": null,
          "is_bot": false,
          "headline": "Deleted samples from project",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-21T20:04:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5359dde75ba5dc7ddc89f9adbde194b6294b75b",
          "body": null,
          "is_bot": false,
          "headline": "Reassigned references to match the new lib directory",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-21T20:03:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cea1d0ff72593cc195065c6c79dddb6317a3cb90",
          "body": "Moved lib and samples to the root of the project.\nTODO: I think samples are also not required.",
          "is_bot": false,
          "headline": "Removed old winforms project",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-21T19:55:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5faa9d4c9a00f3ab5bbab5be08c118303829583e",
          "body": null,
          "is_bot": false,
          "headline": "updated screenshot",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-21T19:37:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20f0b768c242ad3c7540dfe7296cf3f03466d378",
          "body": null,
          "is_bot": false,
          "headline": "Added a feature list to the readme",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-21T19:03:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adf492159e542ea0bdc60ccc3e3c1e1cd9afffbe",
          "body": null,
          "is_bot": false,
          "headline": "Updated badges in readme file",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-21T18:33:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0acf4b1366341f0183612a2db96386520d48433",
          "body": null,
          "is_bot": false,
          "headline": "Readme updates",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-21T09:13:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7156771f2ed615cb0180605739506e4c2b887921",
          "body": "packed hdrexposure into the cameraposition vector.\nremoved initial scene rotation when inititalizing the control.\nincluding changelog in the project",
          "is_bot": false,
          "headline": "Mini optimizations and fixes",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-20T23:09:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf1c502fe6100a78d51fd133cdea779f8ce98f67",
          "body": "reassigned Q/E keys to scene rotation and not camera rotation.\nFixed some issues related to frustum culling (it still needs improvements...)\nIncluded scene rotation to the light position update as well as in the frustum culling process.\nProperly implemented light rendering in the renderManager. lights are kept separately and rendered according to the flags.\nReworked shaders to fix bugs related to scene rotation.",
          "is_bot": false,
          "headline": "Bug Fixes",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-18T07:50:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca06e9751f8ba5046c5604e279039d66105371bb",
          "body": "Setup for translation gizmo with picking and movement. Fixes on lighting shaders. Added backend to facilitate model export using assimp.",
          "is_bot": false,
          "headline": "Updates",
          "author_name": "Greg",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-16T22:21:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c4693e94f21cd72508b8e358e0ca8114d904616",
          "body": "Fixed issue with MBIN, EXML export and reference objects. Also removed convexhull imports from the project files and added the latest libMBIN.dll",
          "is_bot": false,
          "headline": "Bug fix and more",
          "author_name": "Unknown",
          "author_login": null,
          "committed_at": "2020-08-09T18:54:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d938f4b7cebc625a79c595e7f04ed108ccb6543d",
          "body": null,
          "is_bot": false,
          "headline": "Bug Fixes + Error Reports + Work on gizmos",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-08-07T13:08:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3d7b82eb5073a4baa6511105979367892775100",
          "body": "After a shit ton of experiments with ray casting using the projection matrices, it just didn't work. I have no idea why that shit happens. But honestly I have absolutely no clue. Reverted to an alternative ray casting method even lighter that simply moves the camera front vector according to the mou\n[…]\ncolors.  This should also happen to a different fbo as well. Picking involves reading from both fbos, first for checking the selected object, then for checking if the gizmo was selected. This is a WIP",
          "is_bot": false,
          "headline": "Ray Casting attempt and more",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-05-28T12:57:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b422a2193bf28c1ed5a198ab00bca466eaaf7a48",
          "body": "MeshBufferManager manages data buffers per mesh. Dynamic memory allocatio regarding instance Data on both RAM and VRAM. SSBOs are used to replace per mesh UBOs, and offer much larger storage when required. \n\nRevamped gamepadcontroller class. New gamepad supports button and action mapping. First test\n[…]\ng a DS4 controller class which properly maps not by default supported DS4 v2 controlers. In the future I can add support for any controller :)\n\nAdded new function for calculating mipmap level in GLSL.",
          "is_bot": false,
          "headline": "MeshBufferManager, Revamped gamepad support, SSBOs and more",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-05-26T15:40:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a92370f1709a96b532348d5112b1a6256a1a133c",
          "body": "Basic implementation of WBOIT. Brought back support for deferred decals. Added the decal shader logic into the main material shader. Reorganized settings to make the app more robust and interactive.\n\nAdded support for exporting only visible objects to exml/mbin",
          "is_bot": false,
          "headline": "WBOIT + Deferred Decal Rendering  + Settings Reorganization",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-05-24T11:33:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5034818e825df3562de32bf6e5a533f621f82708",
          "body": "GLControl cleanup\nRenderOptions reorganization\nFixed some bugs related to material loading using PAK files.\nAdded routines for auto NMS installation folder identification. (Steam should work flawlessly, not sure about GOG)\nAdded Tone mapping shaders\nEmbedded default textures to the app\nReorganized f\n[…]\n related to loading childrens of reference objects\nShader cleanup\nMinor updates on about page\nAdded work dispatcher thread to handle cpu related tasks of the UI thread without interrupting UI updates.",
          "is_bot": false,
          "headline": "",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-05-21T00:40:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94b8053333d0b4603423c33af3e2600d9b39a444",
          "body": "Disabled animation loading before the animation is used, in order to save time during scene loading. Actual animation data are loaded only when the animation is enabled for playback\nMultiple shaders have been added to add support for bloom effect, gaussian blur and additive blending.\nAdded a shader \n[…]\npendency version updates\nAdded a very preliminary version of PBO buffers per texture for kinda asynchronous texture upload. Looks like its working good for now but I think there is still more into it.",
          "is_bot": false,
          "headline": "A LOT of stuff once again",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-05-14T19:25:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "115b3429e5292d765520fcc6e31b925fb603deaa",
          "body": "Removed locator and joint shaders\nAdded inverted look and projection matrices to the comonperframeUBO.\nIncluded inverse world matrices per instance and added support for decal rendering (decal normal maps are not accumulated atm)\nRemoved stored shader programs per model.\nNecessary update of UBO structs.\nAdded support for 2nd diffuse textures.",
          "is_bot": false,
          "headline": "Various",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-05-03T20:18:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e344d6dee48a3e8689242dd6e528a68e827eea6b",
          "body": "TBOs seem to be working smooth AF. There are still some issues with decal models and their clone calculations (not inheriting proper instanceIDs)\n\nI'm about to fix them and also get rid of all the shader programs that get cached to each model. I think its not required anymore.",
          "is_bot": false,
          "headline": "added support for instancedMeshSkinMats in TBOs",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-04-27T11:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "812ea040f202fc0ac62aff0d445e1fab7179f640",
          "body": "Implemented a proper (expensive but correct) way of calculating the distance from a point to  an AABB. Sorting results look decent for now.\n\nEncountered some problems regarding instanced data, spend the entire day trying to remember what the fuck was wrong. I finally remembered... skin matrices are \n[…]\nd all instance skin data, without having problems with high instance counts and limited UBO sizes. On the other hand the corresponding data from mesh UBOs can be removed so this is also an extra gain.",
          "is_bot": false,
          "headline": "AABB recalculation + checkpoint",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-04-26T20:31:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95ddf15e4a89a8dcf660d031f6b2799d2d7715d0",
          "body": "Brought back to life back to front rendering of transparent objects\nRemoved all the BULLSHIT flags that i had as triggers for the transparent objects. Transparents are the ones that have TRANSPARENCY or CUTOUT (still not sure about that) and transparent scalar.\nCleaned up the shaders a bit\n\n\nAlso fixed the AABB calculation of mesh objects (for now the input value from the mbin attributes are transferred to the actual object)",
          "is_bot": false,
          "headline": "Fixed (as much as I could for now)  transparent object rendering",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-04-25T19:43:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13ac0a6a5897b2a7314895db739db4a77c8efea1",
          "body": "Results are looking good. Also added some extra optimizations regarding mesh info updates.",
          "is_bot": false,
          "headline": "Added support for Diffuse2Maps.",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-04-25T13:51:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "527cad348fe5d29b82a491c03930b7993da4266c",
          "body": "Probably a shit ton of performance fixes. For sure fixed the bug related to the calculation of the TBN matrix in the CPU side.\n\nReorganized completely the way that the scene is updated.\n\nlibmbin, opentk have been updated, model classes have been revisited and re-organized.\n\nOctree implementation has been added\n\nNew font has been added\n\nPlus a lot more that I can't even remember x.x",
          "is_bot": false,
          "headline": "I don't even remember what has changed since the last one",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2020-04-24T12:39:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6c734002dc92c1a8e14192e7ef0ae7806259279",
          "body": "Added a super simple texture renderer OpenTK Gamewindow class that helps me debug texture loading issues.",
          "is_bot": false,
          "headline": "Added the TextureRenderer  Project files",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-12-09T22:09:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd7910a1d5357de3bedd0f195550525d32dc9a60",
          "body": "Fixes on LOD  distance evaluation, brought back gUserData uniform on mesh objects, added tone mapping on the shaders, added support for the NORMAL_TILING material flag + UI fixes.\n\nThere are still some visible issues with toggling instances renderable. I think this is the next issue that has to be solved prior to release, but this require some thinking.",
          "is_bot": false,
          "headline": "Fixed Vertex Color attributes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-12-09T22:08:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8d19c2e19ccb585667ace55e517f669850c0238",
          "body": "Live shader recompilation is a bit broken on some special cases. I've also implemented support for UV scrolling effects and I'm working towards proper rendering of transparent objects.",
          "is_bot": false,
          "headline": "Reword the GLSL Preprocessor, Fixed lighting issues",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-12-08T17:44:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23ca493e4af2380d3a82bb215c64e33305b58a38",
          "body": "Primitive LOD filtering is now a thing, adopting properties of the entity files\nIn order to properly render transparent objects with whatever technique (sorted or unsorted) two things had to be implemented: 1) Output of the calculated light color to the gbuffer, therefore a new attachment was added.\n[…]\nanches of the same code. I am in the process of modifying shader source files to make this work back to normal. Then I'll test this with the deferred and forward lighting passes to see how this works.",
          "is_bot": false,
          "headline": "LOD Filtering, Overhaul of the GLSL preprocessing step and more",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-12-04T17:13:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d430dd2818f7bfd85082152bf98db5c3e8435704",
          "body": "Bounding spheres are calculated much more efficiently now\nAdded extra animation information in the UI\nRefactored the whole animation pipeline to use less resources, cache transformations to memory, removed animation timers, properly calculating and interpolating between frame data.\nI'm about to enter the instanced rendering territory",
          "is_bot": false,
          "headline": "Repaired Shaders, UI changes and Bug Fixing, Animation overhaul",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-12-01T10:37:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2a9ea5e0ba8934b4c3a5cdb030f1496f829e373",
          "body": "I don't even remember most of the bugs that I have fixed at this point. The most critical one dealt with invalid/duplicate hashes when fetching VAOs from the resource Manager. VAOs are now moved to their corresponding geometry object. Implemented a brand new PBR shader as well as a  blooming effect for  glowing objects.",
          "is_bot": false,
          "headline": "Lighting + Bug Fixing",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-11-30T02:25:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09d5bf7a919dd3447c70f13ce9e639d3bdb208da",
          "body": "…I can't get them organized into one place. They keep getting copied to the internal Resources folder of the Solution. Slight progress on animation caching.",
          "is_bot": false,
          "headline": "I have messed up completely with the shader resources. It seems like …",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-11-26T23:49:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac99e72fe14fb845f1484c58df6fb1d033ee09e6",
          "body": "Fixed a lot of issues related to animation playback\nAdded Some LOD related components in order to load LOD models properly\nOptimization fixes on light uploading\nNecessary preparation for shadow mapping\n\nTODO: Frustum culling still looking goofy. I need to make sure that its working properly in all cases.",
          "is_bot": false,
          "headline": "Beyond Updates + Rendering Optimizations + Fixes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-11-26T02:09:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef0f30a18b337e8c6c1d2e11dc173d5855a8fd10",
          "body": "These are 3 month old changes. I need to remember where I fuck I was working on x.x",
          "is_bot": false,
          "headline": "Omnidirectional lighting progress + fixes for beyond",
          "author_name": "Greg Kasapidis",
          "author_login": "gregkwaste",
          "committed_at": "2019-11-03T10:36:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2c974a65a003b1f4543c929415818f7dd856b34",
          "body": "…pping",
          "is_bot": false,
          "headline": "Moved Shader Folders and started working on omnidirectional shadow ma…",
          "author_name": "Greg Kasapidis",
          "author_login": "gregkwaste",
          "committed_at": "2019-08-18T20:05:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8b215adef03b41e3386ea8b2e23cbc41db93878",
          "body": "Small bug fixes and extended error handling\n- Fixed shader lighting for adding support for the default lighting.",
          "is_bot": false,
          "headline": "Updating tool for Beyond + Fixes",
          "author_name": "Greg Kasapidis",
          "author_login": "gregkwaste",
          "committed_at": "2019-08-17T10:20:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "274236c1aa8e81af43b2f625d470e48a17dd9f1d",
          "body": null,
          "is_bot": false,
          "headline": "First version of a multi light system",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-08-15T14:24:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "898e39af6082192972cde9cdf2cfb647d86de797",
          "body": "1) Worked a bit on the texture mixer and made it comply with the texture mixer class and stuff. I think that both the viewer and the mixer work exactly the same way so its a good tool for testing\n2) I think I improved the application of pose data even more. I'm sorting the pose matrices and keeping \n[…]\nf the same textures over and over in the program. Memory impact should be kinda less especially on some of the largest models that overuse the same textures.\n6) I have forgotten what else i have fixed",
          "is_bot": false,
          "headline": "Various Experiments and Fixes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-07-20T20:52:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89246b74e11fb83dc6456793fb4b8f7ce06d53cb",
          "body": "I think the tool layout is much more cleaner this way.\nMaybe shit has to be reorganized a bit better but I'm keeping it this way for the time being...",
          "is_bot": false,
          "headline": "Layout Update",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-07-13T22:24:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf7f585c5438e8aafffcbeff4ac8cf01c3094628",
          "body": "#1 Added toggles for frustum culling and animations\n#2 Implemented a better way for handling pose information'\n#3 I forgot to use the nMat in the shader -.-\n#4 Some other minor shit i guess",
          "is_bot": false,
          "headline": "Various Updates",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-07-13T21:54:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed13487650b22da6d008247c8e684d675b4db648",
          "body": "Working towards a more complete lighting system. (I'm pissed because again the mesh part normals do not match with the meshes close to them...",
          "is_bot": false,
          "headline": "New Light system",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-07-08T09:23:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce24e50a224da90fbc6d2336e9ee433c198f5b90",
          "body": "Brought back RenderBoundHulls flag. Also implemented a UBO report function that tracks the GLSL shader and fetches the uniform offset so that I won't get lost next time that I have to implement a struct for that kind of shit.",
          "is_bot": false,
          "headline": "A bit of a cleanup",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-18T11:59:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7a17a91b6e97ec98b7bedd96b6130554e65dff3",
          "body": "The whole pursuit was about implementing a better light system. It soon ended up with organizing all shader uniforms into structs, using UBOs for common perframe and permesh parameters. Because of the GLSL mess with explicit uniform locations in uniforms within a struct, I ended up loading all the a\n[…]\nendously cleaner (although capturing the correct format of the C# structs to match the std140 GLSL versions was a nightmare), but performance seems pretty much the same, not to say it got a bit worse.",
          "is_bot": false,
          "headline": "Added UBO Support and organized the basic shaders",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-18T10:27:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5271a3ddc7c7dc41a843d9bbce0faa5070a8d576",
          "body": "All the color mismatches that occured mostly on proc gen models, occured due to false colorspace used for the textures. It seems like all diffuse textures use sRGB, and I'm forcing this atm. Actually due to lack of info, I'm forcing sRGB on all textures other than the RG normal textures.",
          "is_bot": false,
          "headline": "Added support for sRGB textures",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-17T10:26:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36bf02b416359966f8d4045f83f472b63b8cf77b",
          "body": "Need to rework a bit the animation loading part, as it now is loading only the first active animation and also possibly blend animations together. \nI need to make the generic animation toggle button to properly interact with the GLControl. Animations are working find though.",
          "is_bot": false,
          "headline": "Added Animations to the UI",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-16T23:32:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b5feb2fe3131b55f590716db3a0b1e89cc23244",
          "body": "I forgot that the InvBMatrix refers to global space while Bindmatrix as well as all the animation frame data are transforms RELATIVE to the parent...\n\nPose data is not calculated properly. Trying to use just animationframes for now...",
          "is_bot": false,
          "headline": "Fixed Pose Data Integration",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-16T10:22:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ae3f97c56aa6d080f057137979466895563491e",
          "body": "I ended up compiling my own version of the library. Probably there was a conflict with the target architecture of the released lib. Also fixed any reference issues with all the other projects of the solution (Mainly QuickFont). Currently working on separating the jointDictionary from a scene, and mo\n[…]\nTODO: I don't trust the cloning functions at all. I simplified them a bit, but I need to work on them again in order to make sure that everything gets uniquely copied when generating a proc gen model.",
          "is_bot": false,
          "headline": "Fixed XAML issues with LibMBIN",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-15T18:46:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed81e440c5742a9df6490e003b030e8729a4eb53",
          "body": "Started with entity parsing. For now one attachment is supported, we fetch it, then go through a component processing procedure. For now AnimPose and AnimData components are supported. AnimPose data has been exposed to the UI, I just need to update the pose on demand when the data changes. TODO: Do the same thing with the animations.",
          "is_bot": false,
          "headline": "libmbin 1.78 + AnimPose Classes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-14T00:07:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3242174c252cc39131d98d8633bee10e40307b8e",
          "body": "1) Added support for model poses. TODO: I need to properly handle locator attachments during object loading. Attachments contain animpose data, which I can use to procedurally generate a pose for a model\n2) Bound the Renderoptions as static resources to the UI.\n3) Added some animation controls on the UI (TODO: I need to make sure that key presses from the glcontrol are mapped to the UI buttons)",
          "is_bot": false,
          "headline": "Reworked Animation Controls",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-02T21:07:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "315728763a0b57bd76fe2af7146ecdda3cb3f099",
          "body": "Implemented a new RenderManager class that tries to organize mesh objects and render them directly. For now I don't do any sorting. I just separate static and trransparent objects. Static meshes are loaded first, transparent meshes are rendered after the static with blend on and depthmask off. Works for now but its probably far from perfect.\n\nFixed some bugs regarding empty material loading, UI binding and probably some more shit.",
          "is_bot": false,
          "headline": "Implemented RenderManager class  + Transparency support",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-06-01T21:34:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d267cc84a655c183637932569f412f517a76c54d",
          "body": "1) Fixed the texture mixer (texture mixing ressembles as much as possible the original shader)\n2) Updated the gbuffer\n3) Revamped the material class to inherit the TkMaterialData\n4) Added more rendering stats",
          "is_bot": false,
          "headline": "Fixes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-05-31T22:13:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "095d31c1ca9815b19f48f0080111640c36cd76f5",
          "body": "Replaced the custom GUI for querying object properties with XAML binding rules. Scene editing should work (hopefully) without many bugs. \n\nCompletely overhauled material parsing. Now texture parsing is done through the samplers. A texture resource manager is implemented and assigned per model. This way its scene model keeps its own textures.",
          "is_bot": false,
          "headline": "XAML updates + Material overhaul",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-05-30T17:14:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2363720b3ed6ff3058ad82cdd5fb0cc8a83b02f1",
          "body": "1) I fixed bugs related to capsule and cylinder collision loading. Should be working properly now\n2) Fixed collision mesh loading and rendering based on the bound hulls\n3) Added support for multitextures: This contains: a) converting all textures to 2darrays in order to minimize the changes on the s\n[…]\nrop support in the treeview, so that we can start visually manipulating the structure of the scene.\n6) Working towards adding uniform buffers for custom and common material flags.\n7) Should be more...",
          "is_bot": false,
          "headline": "A ton of updates , new features and optimizations",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-05-26T02:14:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8c2d1dc3af15bd6d7b3b090b099141750a884dc0",
          "body": "Fixed a bug with capsule collision rendering. Also I think I got the capsule geometry to  calculate properly.\nOptimized some shader code a bit more\nReorganized the code again. Shader compilation is done by the CGLControl. The main file is super clean now.\nRemoved some unecessary classes",
          "is_bot": false,
          "headline": "Code Organization + even more optimizations + bug fixes",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-05-23T15:48:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b38e4936edb3aada25c29af2c972ab2fce8b5e7",
          "body": "Optimized the rendering process of the meshmodels, trying to limit the calls to GL.UniformLocation as much as possible. Also tried to optimize text rendering process as well.\n\nAdded some more rendering thread request messages. Improved the GUI. Reorganized some of the GLControl code.\n\nAlso farewell to the initial model_viewer project. I removed it from the solution file :'(",
          "is_bot": false,
          "headline": "Optimizations + More Vol2",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-05-23T11:11:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ffdf96860507c6270f0adb6ecb90dd2bfd0b6ab",
          "body": "Added a model update method, which dramatically reduces the multiplications during object transform matrix calculations. Now transform attributes can be calculated on the fly during the update for a model and its children.\n\nReplaced my text renderer with QuickFont. Looks fine and much simpler.\n\nAdde\n[…]\nfficient rendering of joints\n\nAdded a new request type for handling scene update requests (should be executed from the rendering thread).\n\nOther optimizations, reorganizations and fixes here and there",
          "is_bot": false,
          "headline": "Optimizations + More",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-05-05T15:12:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "65b6743b312a45ad20ce80823d59a6f1ffb08920",
          "body": "A lot of optimizations.\nI have removed the stupid numeric element from the interface which is much more smooth with textboxes.\nI'm preloading mipmaps from existing textures instead of generating them\nMigrated to OpenGL 4.2 as much as possible\nReorganization to the resource manager\nAdded a unit tests\n[…]\nthis update also adds support for live editing shaders that I had implemented months ago.\n\nThis is a backup commit cause I'll start testing math shit. I believe that OpenTK math library is utter SHIT.",
          "is_bot": false,
          "headline": "I have lost track of how many updates I have made",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2019-05-04T23:13:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6c531d031acf5d71458e44b93e98ad335f58cf4",
          "body": "Moved rendering to a separate thread to release the UI thread.\nBugfixing on animations\nAdded palette parsing from biome files (TODO: make sure this is user defined at some point)",
          "is_bot": false,
          "headline": "Updated code to the latest libMBIN library.",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2018-08-26T23:59:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64df5a17928c373e52818277e03370994f2c522d",
          "body": "Fixed Recoloring shaders + code\nPreparing for threaded rendering in the GLControl",
          "is_bot": false,
          "headline": "Brought back the semi deferred renderer.",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2018-08-26T02:40:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d147350abace0ac4a7a583fd19608cfb55999b48",
          "body": "Combined TextureMixer Project\nCreated a new WPF Project for the VIewer\nAdded a shared code projects for sharing code between all the projects\nA SHIT ton of optimizations  on the control as well as the rendering process and the shaders (I'm too tired to list them all now lol)",
          "is_bot": false,
          "headline": "Completely reorganized Solution.",
          "author_name": "gregkwaste",
          "author_login": "gregkwaste",
          "committed_at": "2018-08-23T01:07:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbd2d16c09fef2ef1fa8abf80f645f547cb0e301",
          "body": null,
          "is_bot": false,
          "headline": "Added updated shaders",
          "author_name": "Greg Kasapidis",
          "author_login": "gregkwaste",
          "committed_at": "2018-08-20T17:28:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6a7e5083e3c7074f5b95d2df44dc925d1c96040",
          "body": null,
          "is_bot": false,
          "headline": "Minor Updates",
          "author_name": "Greg Kasapidis",
          "author_login": "gregkwaste",
          "committed_at": "2018-08-20T17:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 13,
      "commits_last_year": 1,
      "latest_release_at": "2025-08-20T08:14:37Z",
      "latest_release_tag": "v0.93.1-pre",
      "releases_from_tags": false,
      "days_since_last_push": 139,
      "active_weeks_last_year": 1,
      "days_since_latest_release": 350,
      "mean_days_between_releases": 145.5
    },
    "artifacts": {
      "collected": true,
      "structure": [],
      "declarations": [
        {
          "name": "SimpleTextureRenderer",
          "path": "SimpleTextureRenderer/SimpleTextureRenderer.csproj",
          "tokens": [
            "nuget.output_type:exe"
          ],
          "ecosystem": "nuget"
        },
        {
          "name": "TextureMixer",
          "path": "TextureMixer/TextureMixer.csproj",
          "tokens": [
            "nuget.output_type:winexe"
          ],
          "ecosystem": "nuget"
        },
        {
          "name": "TextureRenderer",
          "path": "TextureRenderer/TextureRenderer.csproj",
          "tokens": [
            "nuget.output_type:exe"
          ],
          "ecosystem": "nuget"
        },
        {
          "name": "Viewer_Unit_Tests",
          "path": "Viewer_Unit_Tests/Viewer_Unit_Tests.csproj",
          "tokens": [
            "nuget.output_type:library"
          ],
          "ecosystem": "nuget"
        },
        {
          "name": "WPFModelViewer",
          "path": "WPFModelViewer/WPFModelViewer.csproj",
          "tokens": [
            "nuget.platform_tfm:windows8.0",
            "nuget.output_type:winexe"
          ],
          "ecosystem": "nuget"
        }
      ]
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "readme_badges": {
        "hosts": [
          "shields.io"
        ],
        "total": 3,
        "header": 3,
        "collected": true,
        "has_inspect_badge": false
      },
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 14,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 7,
      "stars": 47,
      "watchers": 8,
      "fork_history": {
        "days": [
          {
            "date": "2021-04-04",
            "count": 1
          },
          {
            "date": "2021-06-27",
            "count": 1
          },
          {
            "date": "2022-01-26",
            "count": 1
          },
          {
            "date": "2022-03-29",
            "count": 1
          },
          {
            "date": "2022-05-26",
            "count": 1
          },
          {
            "date": "2023-03-20",
            "count": 1
          },
          {
            "date": "2024-05-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 7,
        "total_forks": 7
      },
      "star_history": null,
      "open_issues_and_prs": 5
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "SimpleTextureRenderer/SimpleTextureRenderer.csproj",
        "TextureMixer/TextureMixer.csproj",
        "TextureRenderer/TextureRenderer.csproj",
        "Viewer_Unit_Tests/Viewer_Unit_Tests.csproj",
        "WPFModelViewer/WPFModelViewer.csproj"
      ],
      "largest_source_bytes": 80963,
      "source_files_sampled": 76,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "SimpleTextureRenderer/SimpleTextureRenderer.csproj",
        "TextureMixer/TextureMixer.csproj",
        "TextureRenderer/TextureRenderer.csproj",
        "Viewer_Unit_Tests/Viewer_Unit_Tests.csproj",
        "WPFModelViewer/WPFModelViewer.csproj"
      ],
      "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": [
        "nuget"
      ],
      "dependencies": [
        {
          "name": "OpenTK",
          "manifest": "SimpleTextureRenderer/SimpleTextureRenderer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "3.1.0"
        },
        {
          "name": "AssimpNet",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "5.0.0-beta1"
        },
        {
          "name": "Costura.Fody",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "5.8.0-alpha0098"
        },
        {
          "name": "Fody",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "6.8.1"
        },
        {
          "name": "Gameloop.Vdf",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "0.6.2"
        },
        {
          "name": "MathNet.Numerics",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "5.0.0"
        },
        {
          "name": "Microsoft.CSharp",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "4.7.0"
        },
        {
          "name": "Newtonsoft.Json",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "13.0.3"
        },
        {
          "name": "NLog",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "5.3.2"
        },
        {
          "name": "OpenTK.GLWpfControl",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "4.2.3"
        },
        {
          "name": "OpenTK",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "4.8.2"
        },
        {
          "name": "System.Drawing.Common",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "8.0.7"
        },
        {
          "name": "WindowsAPICodePack",
          "manifest": "WPFModelViewer/WPFModelViewer.csproj",
          "ecosystem": "nuget",
          "version_constraint": "8.0.4"
        }
      ],
      "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": 0,
        "open_issues": 5,
        "closed_ratio": 0.667,
        "closed_issues": 10,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "gregkwaste",
          "commits": 198,
          "avatar_url": "https://avatars.githubusercontent.com/u/7515235?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": false,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 7,
            "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": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 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": "ee2ed17e79ff82ec4cfd069f33fcd2234e443e03",
        "ran_at": "2026-08-05T17:52:50Z",
        "aggregate_score": 1.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "recent_prs": {
        "merged_7d": 0,
        "decided_7d": 0,
        "merged_30d": 0,
        "authors_30d": 0,
        "decided_30d": 0,
        "sample_size": 0,
        "window_days": 30,
        "sample_exhausted": false,
        "authors_probed_30d": 0,
        "newcomer_merged_30d": 0,
        "bot_prs_excluded_30d": 0,
        "newcomer_authors_30d": 0,
        "newcomer_decided_30d": 0
      },
      "ci_last_run_at": "2025-08-20T07:59:56Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 9,
          "created_at": "2024-09-02T01:54:10Z",
          "last_comment_at": "2024-10-08T23:02:36Z",
          "last_comment_author": "gregkwaste"
        },
        {
          "number": 11,
          "created_at": "2024-09-10T15:38:07Z",
          "last_comment_at": "2025-03-26T06:25:26Z",
          "last_comment_author": "kefiiiiir"
        },
        {
          "number": 13,
          "created_at": "2025-02-17T04:30:17Z",
          "last_comment_at": "2025-09-21T22:46:00Z",
          "last_comment_author": "jurassicjordan"
        },
        {
          "number": 14,
          "created_at": "2025-03-07T17:02:36Z",
          "last_comment_at": "2025-09-23T18:25:40Z",
          "last_comment_author": "davebastian"
        },
        {
          "number": 16,
          "created_at": "2026-01-22T18:32:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/gregkwaste/NMSMV",
    "host": "github.com",
    "name": "NMSMV",
    "owner": "gregkwaste"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": "The weighted overall 27 is calibrated to 21 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 27,
            "calibrated": 21,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 21,
      "inputs": {
        "security": 17,
        "vitality": 30,
        "community": 32,
        "governance": 35,
        "calibration": "2026-08-02",
        "engineering": 17,
        "ai_readiness": 42,
        "weighted_overall_raw": 27
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 30,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "commits_last_year": 1,
              "human_commit_share": 1,
              "days_since_last_push": 139,
              "active_weeks_last_year": 1
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 139 days ago",
                "points": 9.9,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 139
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "1/52 weeks with commits",
                "points": 0.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1 commits in the last year",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "moderate",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "releases_count": 13,
              "latest_release_tag": "v0.93.1-pre",
              "releases_from_tags": false,
              "days_since_latest_release": 350,
              "mean_days_between_releases": 145.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 350 days ago",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 350
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~145.5 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 145.5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "exceptional",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "dormant",
              "guards": [
                "recent_release"
              ],
              "signals": [
                "scorecard_unmaintained"
              ],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": 0,
              "unanswered_open_issues": 3,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 350,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "no human commit for 350 days, with nothing left unanswered; held at dormant by a release within the year",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_quiet",
                    "params": {
                      "days": 350
                    }
                  },
                  {
                    "code": "abandonment_guarded",
                    "params": {
                      "guards": "a release within the year"
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "weak",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "forks": 7,
              "stars": 47,
              "watchers": 8,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "47 stars",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 47
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "7 forks",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "8 watchers",
                "points": 4.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "at_risk",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "readme_badges": 3,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "readme_badge_services": [
                "shields.io"
              ],
              "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": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "weak",
        "name": "Sustainability & Governance",
        "value": 35,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "weak",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): PR acceptance, Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "pr_acceptance",
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 49,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 5,
              "closed_issues": 10,
              "prs_merged_7d": 0,
              "prs_decided_7d": 0,
              "prs_merged_30d": 0,
              "prs_decided_30d": 0,
              "issue_closed_ratio": 0.667,
              "closed_unmerged_prs": 0,
              "first_time_authors_30d": 0,
              "first_time_prs_merged_30d": 0,
              "first_time_prs_decided_30d": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "67% of issues closed",
                "points": 28,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 67
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "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": 52,
            "inputs": {
              "followers": 18,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "gregkwaste",
              "public_repos": 24,
              "account_age_days": 4473
            },
            "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": "18 followers of gregkwaste",
                "points": 9.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 18,
                      "login": "gregkwaste"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "24 public repos, account ~12 yr old",
                "points": 22.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 24
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "critical",
        "name": "Engineering Quality",
        "value": 17,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "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": 1,
            "inputs": {
              "has_ci": false,
              "has_tests": false,
              "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": 0,
                "status": "missed",
                "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": "weak",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 17,
        "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, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 17,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 1.7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no 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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "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": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "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": "exceptional",
            "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"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "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": "weak",
        "name": "AI Readiness",
        "value": 42,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "weak",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.66,
              "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": "66 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 35.2,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 66,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "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": 26,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "SimpleTextureRenderer/SimpleTextureRenderer.csproj",
                "TextureMixer/TextureMixer.csproj",
                "TextureRenderer/TextureRenderer.csproj",
                "Viewer_Unit_Tests/Viewer_Unit_Tests.csproj",
                "WPFModelViewer/WPFModelViewer.csproj"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "SimpleTextureRenderer/SimpleTextureRenderer.csproj, TextureMixer/TextureMixer.csproj, TextureRenderer/TextureRenderer.csproj (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "SimpleTextureRenderer/SimpleTextureRenderer.csproj, TextureMixer/TextureMixer.csproj, TextureRenderer/TextureRenderer.csproj"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": "C# (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C#"
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "C#",
              "largest_source_bytes": 80963,
              "source_files_sampled": 76,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C# (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C#"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/76 source files over 60KB",
                "points": 54.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 76,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "top": [
        "library",
        "application"
      ],
      "labels": [
        "desktop",
        "library"
      ],
      "scores": {
        "desktop": 4.8,
        "library": 4.8,
        "application": 3
      },
      "primary": "desktop",
      "evidence": [
        {
          "tier": "declared",
          "label": "desktop",
          "source": "nuget.output_type:winexe",
          "weight": 4.8
        },
        {
          "tier": "declared",
          "label": "library",
          "source": "nuget.output_type:library",
          "weight": 4.8
        },
        {
          "tier": "declared",
          "label": "application",
          "source": "nuget.output_type:exe",
          "weight": 3
        }
      ],
      "artifacts": [
        {
          "path": "SimpleTextureRenderer/SimpleTextureRenderer.csproj",
          "labels": [
            "application"
          ],
          "ecosystem": "nuget"
        },
        {
          "path": "TextureMixer/TextureMixer.csproj",
          "labels": [
            "desktop"
          ],
          "ecosystem": "nuget"
        },
        {
          "path": "TextureRenderer/TextureRenderer.csproj",
          "labels": [
            "application"
          ],
          "ecosystem": "nuget"
        },
        {
          "path": "Viewer_Unit_Tests/Viewer_Unit_Tests.csproj",
          "labels": [
            "library"
          ],
          "ecosystem": "nuget"
        },
        {
          "path": "WPFModelViewer/WPFModelViewer.csproj",
          "labels": [
            "desktop"
          ],
          "ecosystem": "nuget"
        }
      ],
      "confidence": "high",
      "host_extension": false,
      "runs_as_process": true,
      "consumed_by_code": true
    },
    "metrics_version": "2.5.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-08-05T17:52:55.143587Z",
  "schema_version": "0.31.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/g/gregkwaste/NMSMV.svg",
  "full_name": "gregkwaste/NMSMV",
  "license_state": "absent",
  "license_spdx": null
}

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 v2.5.0, Schema v0.31.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistiken.