Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 00:48 UTC

acesuares / inline_forms

Inline Forms

Ruby · HTMLMIT★ 24 Sterne⑂ 15 Forksseit Jan. 2011Auf GitHub ansehen ↗

acesuares/inline_forms erreicht einen Gesundheitsindex von 54 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (77/100) ab, am schwächsten bei Security (39/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

54
gesamt / 100
Mittel

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

Ace SuaresPersönliches Konto
33 Follower48 öffentliche Reposseit März 2008Suares & Co

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
RubyGemsinline_forms8.1.43-427vor 0 Tagen
RubyGemsinline_forms_installer8.1.43-36vor 0 Tagen
RubyGemsinline_forms_schema_edit8.1.43-2vor 0 Tagen

Metriken nach Kategorie

Vitalität

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

77Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
6.2/36Commit-Rhythmus — 9/52 Wochen mit Commits
18/18Commit-Volumen — 165 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year165
human_commit_share1
days_since_last_push0
active_weeks_last_year9
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 100 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 6,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count100
latest_release_tagv8.1.43
releases_from_tagsja
days_since_latest_release0
mean_days_between_releases6,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

50Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
22.1/60Stars — 24 Stars
9.6/25Forks — 15 Forks
0/15Watcher — 2 Watcher
Verwendete Eingangsdaten
forks15
stars24
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
63/80Downloads gesamt — 1.150.026 Downloads insgesamt über rubygems
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesinline_forms, inline_forms_installer, inline_forms_schema_edit
dependents
ecosystemsrubygems
total_downloads1.150.026
monthly_downloads
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

51Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
1.5/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 93 % der Commits
6.8/13.5Breite der Beitragenden — 5 Beitragende
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Verwendete Eingangsdaten
bus_factor1
contributors_sampled5
top_contributor_share0,933
Wie die Bewertung erfolgt
5.8/46.8Issue-Lösungsquote — 12 % der Issues geschlossen
33.3/38.3PR-Annahme — 34/39 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs34
open_issues7
closed_issues1
issue_closed_ratio0,125
closed_unmerged_prs5
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
11/25Reichweite des Inhabers — 33 Follower von acesuares
24.3/25Kontohistorie — 48 öffentliche Repos, Kontoalter ca. 18 Jahre
Verwendete Eingangsdaten
followers33
owner_typeUser
is_verified
owner_loginacesuares
public_repos48
account_age_days6.707
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 3 Paket(e) auf rubygems
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
20/20Versionshistorie — 427 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesinline_forms, inline_forms_installer, inline_forms_schema_edit
ecosystemsrubygems
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

50Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
16/16Linter-Konfiguration — .rubocop.yml
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

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

39Gefährdet · 16 % des Gesamtindex

Sicherheitslage

39Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
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
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate3,9
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

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

46Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 92 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,92
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .rubocop.yml
0/11Statische Typprüfung
0/10Reproduzierbare Umgebung
10/10Belegte Agentenpraxis — 96 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0,96
toolchain_manifests
dependency_bot_commit_share0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — Ruby ohne Typprüfungs-Konfiguration
54.7/55Handhabbare Dateigrößen — 1/175 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRuby
largest_source_bytes74.312
source_files_sampled175
oversized_source_files1

Eckdaten

24GitHub-Sterne
5Mitwirkende
165Commits, letzte 12 Monate
0Tage seit letztem Push
100Releases
1Bus-Faktor
7offene Issues
RubyGemsPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • No resolved dependencies carried a version and a supported ecosystem

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 15 ⇿
0Sterne
15Forks
11Releases

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.

03581013151592012-052015-022017-10
Major 1Minor 0Patch 10

Jeder Punkt umfasst 5 Tage.

OpenSSF Scorecard 3.9 / 10
3.9Gesamtwert

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

10Binary-Artifactsno binaries found in the repo
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
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 1
RegistryPaketVersionsvorgabeManifest
RubyGemsvalidation_hintsGemfile
Alle Abhängigkeiten 12

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 1 direkte und 11 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
RubyGemsvalidation_hintsdirekt
RubyGemsinline_formsindirekt
RubyGemsinline_forms_schema_editindirekt
RubyGemsminitestindirekt
RubyGemspaper_trailindirekt
RubyGemsrailsindirekt
RubyGemsrails-i18nindirekt
RubyGemsrubocop-rails-omakaseindirekt
RubyGemssqlite3indirekt
RubyGemsthorindirekt
RubyGemsturbo-railsindirekt
RubyGemswill_paginateindirekt
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies carried a version and a supported ecosystem

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 5510,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 64,
        "HTML": 71062,
        "Ruby": 585315,
        "SCSS": 44976,
        "JavaScript": 3906
      },
      "pushed_at": "2026-07-22T23:33:23Z",
      "created_at": "2011-01-27T17:47:53Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T23:33:26Z",
      "description": "Inline Forms",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "Ruby",
      "significant_languages": [
        "Ruby",
        "HTML"
      ]
    },
    "owner": {
      "blog": "http://opencuracao.com",
      "name": "Ace Suares",
      "type": "User",
      "login": "acesuares",
      "company": "Suares & Co",
      "location": "Willemstad, Netherlands Antilles",
      "followers": 33,
      "avatar_url": "https://avatars.githubusercontent.com/u/2784?v=4",
      "created_at": "2008-03-11T01:33:20Z",
      "is_verified": null,
      "public_repos": 48,
      "account_age_days": 6707
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v8.1.43",
          "kind": "patch",
          "published_at": "2026-07-22T23:31:52Z"
        },
        {
          "tag": "v8.1.42",
          "kind": "patch",
          "published_at": "2026-07-22T23:21:28Z"
        },
        {
          "tag": "v8.1.40",
          "kind": "patch",
          "published_at": "2026-07-10T18:28:25Z"
        },
        {
          "tag": "v8.1.21",
          "kind": "patch",
          "published_at": "2026-06-03T10:35:15Z"
        },
        {
          "tag": "v8.1.20",
          "kind": "patch",
          "published_at": "2026-05-29T21:25:53Z"
        },
        {
          "tag": "v8.1.19",
          "kind": "patch",
          "published_at": "2026-05-29T01:39:18Z"
        },
        {
          "tag": "v8.1.18",
          "kind": "patch",
          "published_at": "2026-05-28T23:54:13Z"
        },
        {
          "tag": "v8.1.17",
          "kind": "patch",
          "published_at": "2026-05-28T22:57:45Z"
        },
        {
          "tag": "v8.1.16",
          "kind": "patch",
          "published_at": "2026-05-28T22:31:12Z"
        },
        {
          "tag": "v8.1.15",
          "kind": "patch",
          "published_at": "2026-05-28T22:15:36Z"
        },
        {
          "tag": "v8.1.13",
          "kind": "patch",
          "published_at": "2026-05-28T19:00:40Z"
        },
        {
          "tag": "v8.1.11",
          "kind": "patch",
          "published_at": "2026-05-28T18:41:25Z"
        },
        {
          "tag": "v8.1.10",
          "kind": "patch",
          "published_at": "2026-05-28T00:49:47Z"
        },
        {
          "tag": "v8.1.9",
          "kind": "patch",
          "published_at": "2026-05-27T22:45:24Z"
        },
        {
          "tag": "v8.1.8",
          "kind": "patch",
          "published_at": "2026-05-27T20:24:09Z"
        },
        {
          "tag": "v8.1.6",
          "kind": "patch",
          "published_at": "2026-05-27T14:37:41Z"
        },
        {
          "tag": "v8.1.5",
          "kind": "patch",
          "published_at": "2026-05-27T10:48:24Z"
        },
        {
          "tag": "v8.1.4",
          "kind": "patch",
          "published_at": "2026-05-26T22:22:14Z"
        },
        {
          "tag": "v8.1.3",
          "kind": "patch",
          "published_at": "2026-05-26T22:04:00Z"
        },
        {
          "tag": "v8.1.2",
          "kind": "patch",
          "published_at": "2026-05-26T21:25:11Z"
        },
        {
          "tag": "v8.1.1",
          "kind": "patch",
          "published_at": "2026-05-26T15:16:23Z"
        },
        {
          "tag": "v8.1.0",
          "kind": "minor",
          "published_at": "2026-05-26T00:50:25Z"
        },
        {
          "tag": "v8.0.4",
          "kind": "patch",
          "published_at": "2026-05-24T19:06:02Z"
        },
        {
          "tag": "v8.0.3",
          "kind": "patch",
          "published_at": "2026-05-22T22:37:16Z"
        },
        {
          "tag": "v8.0.2",
          "kind": "patch",
          "published_at": "2026-05-22T21:47:35Z"
        },
        {
          "tag": "v8.0.0",
          "kind": "major",
          "published_at": "2026-05-22T20:21:39Z"
        },
        {
          "tag": "v7.13.18",
          "kind": "patch",
          "published_at": "2026-05-22T16:44:25Z"
        },
        {
          "tag": "v7.13.17",
          "kind": "patch",
          "published_at": "2026-05-21T23:54:30Z"
        },
        {
          "tag": "v7.13.16",
          "kind": "patch",
          "published_at": "2026-05-21T23:27:28Z"
        },
        {
          "tag": "v7.13.15",
          "kind": "patch",
          "published_at": "2026-05-21T23:10:10Z"
        },
        {
          "tag": "v7.13.14",
          "kind": "patch",
          "published_at": "2026-05-21T12:45:51Z"
        },
        {
          "tag": "v7.13.13",
          "kind": "patch",
          "published_at": "2026-05-21T10:26:38Z"
        },
        {
          "tag": "v7.13.12",
          "kind": "patch",
          "published_at": "2026-05-21T01:57:22Z"
        },
        {
          "tag": "v7.13.11",
          "kind": "patch",
          "published_at": "2026-05-21T00:41:36Z"
        },
        {
          "tag": "v7.13.10",
          "kind": "patch",
          "published_at": "2026-05-21T00:32:47Z"
        },
        {
          "tag": "v7.13.8",
          "kind": "patch",
          "published_at": "2026-05-20T14:31:59Z"
        },
        {
          "tag": "v7.13.5",
          "kind": "patch",
          "published_at": "2026-05-20T12:25:12Z"
        },
        {
          "tag": "v7.13.4",
          "kind": "patch",
          "published_at": "2026-05-19T21:47:18Z"
        },
        {
          "tag": "v7.13.3",
          "kind": "patch",
          "published_at": "2026-05-19T21:09:21Z"
        },
        {
          "tag": "v7.13.2",
          "kind": "patch",
          "published_at": "2026-05-19T20:54:09Z"
        },
        {
          "tag": "v7.11.0",
          "kind": "minor",
          "published_at": "2026-05-19T18:53:13Z"
        },
        {
          "tag": "v7.10.2",
          "kind": "patch",
          "published_at": "2026-05-19T16:27:46Z"
        },
        {
          "tag": "v7.9.6",
          "kind": "patch",
          "published_at": "2026-05-17T21:47:05Z"
        },
        {
          "tag": "v7.9.3",
          "kind": "patch",
          "published_at": "2026-05-17T19:28:51Z"
        },
        {
          "tag": "v7.9.1",
          "kind": "patch",
          "published_at": "2026-05-17T15:41:27Z"
        },
        {
          "tag": "v7.5.2",
          "kind": "patch",
          "published_at": "2026-05-16T14:27:51Z"
        },
        {
          "tag": "v7.5.0",
          "kind": "minor",
          "published_at": "2026-05-19T18:48:11Z"
        },
        {
          "tag": "v7.2.11",
          "kind": "patch",
          "published_at": "2026-05-07T11:43:26Z"
        },
        {
          "tag": "v7.2.10",
          "kind": "patch",
          "published_at": "2026-05-06T21:04:09Z"
        },
        {
          "tag": "v7.0.4",
          "kind": "patch",
          "published_at": "2026-05-05T21:33:21Z"
        },
        {
          "tag": "v6.3.3",
          "kind": "patch",
          "published_at": "2026-05-03T18:09:34Z"
        },
        {
          "tag": "v6.2.14",
          "kind": "patch",
          "published_at": "2024-04-23T13:27:46Z"
        },
        {
          "tag": "v6.2.12",
          "kind": "patch",
          "published_at": "2024-03-25T21:03:53Z"
        },
        {
          "tag": "v6.2.11",
          "kind": "patch",
          "published_at": "2024-03-24T19:24:57Z"
        },
        {
          "tag": "v6.2.10",
          "kind": "patch",
          "published_at": "2024-03-24T16:11:31Z"
        },
        {
          "tag": "v6.2.9",
          "kind": "patch",
          "published_at": "2024-02-28T11:01:08Z"
        },
        {
          "tag": "v6.2.7",
          "kind": "patch",
          "published_at": "2024-02-08T13:26:52Z"
        },
        {
          "tag": "v6.2.6",
          "kind": "patch",
          "published_at": "2024-02-07T15:25:06Z"
        },
        {
          "tag": "v6.2.5",
          "kind": "patch",
          "published_at": "2023-04-14T18:07:25Z"
        },
        {
          "tag": "v6.2.4",
          "kind": "patch",
          "published_at": "2021-08-06T12:11:27Z"
        },
        {
          "tag": "v6.2.3",
          "kind": "patch",
          "published_at": "2021-08-05T20:08:44Z"
        },
        {
          "tag": "v6.2.2",
          "kind": "patch",
          "published_at": "2021-04-12T18:41:26Z"
        },
        {
          "tag": "v6.2.1",
          "kind": "patch",
          "published_at": "2021-04-11T15:50:44Z"
        },
        {
          "tag": "v6.1.1",
          "kind": "patch",
          "published_at": "2021-01-02T16:33:49Z"
        },
        {
          "tag": "v6.1.0",
          "kind": "minor",
          "published_at": "2020-07-05T23:24:54Z"
        },
        {
          "tag": "v6.0.8",
          "kind": "patch",
          "published_at": "2020-07-01T16:35:21Z"
        },
        {
          "tag": "v6.0.7",
          "kind": "patch",
          "published_at": "2020-06-30T18:32:21Z"
        },
        {
          "tag": "v6.0.6",
          "kind": "patch",
          "published_at": "2020-06-10T19:31:28Z"
        },
        {
          "tag": "v6.0.5",
          "kind": "patch",
          "published_at": "2020-06-10T18:48:52Z"
        },
        {
          "tag": "v6.0.4",
          "kind": "patch",
          "published_at": "2020-06-10T18:22:11Z"
        },
        {
          "tag": "v6.0.3",
          "kind": "patch",
          "published_at": "2020-06-10T18:04:45Z"
        },
        {
          "tag": "v6.0.2",
          "kind": "patch",
          "published_at": "2020-06-10T17:42:24Z"
        },
        {
          "tag": "v6.0.1",
          "kind": "patch",
          "published_at": "2020-06-08T18:44:50Z"
        },
        {
          "tag": "v5.2.8",
          "kind": "patch",
          "published_at": "2019-12-24T13:51:05Z"
        },
        {
          "tag": "v5.2.7",
          "kind": "patch",
          "published_at": "2019-12-24T13:34:26Z"
        },
        {
          "tag": "v5.2.6",
          "kind": "patch",
          "published_at": "2019-12-24T13:20:11Z"
        },
        {
          "tag": "v5.2.5",
          "kind": "patch",
          "published_at": "2019-12-18T18:53:18Z"
        },
        {
          "tag": "v5.2.4",
          "kind": "patch",
          "published_at": "2018-10-07T02:14:20Z"
        },
        {
          "tag": "v5.2.3",
          "kind": "patch",
          "published_at": "2018-09-23T11:50:25Z"
        },
        {
          "tag": "v5.2.2",
          "kind": "patch",
          "published_at": "2018-09-20T04:24:14Z"
        },
        {
          "tag": "v5.2.1",
          "kind": "patch",
          "published_at": "2018-09-18T14:47:50Z"
        },
        {
          "tag": "v5.1.4",
          "kind": "patch",
          "published_at": "2018-09-18T14:42:35Z"
        },
        {
          "tag": "v5.1.3",
          "kind": "patch",
          "published_at": "2018-09-18T13:44:58Z"
        },
        {
          "tag": "v5.1.2",
          "kind": "patch",
          "published_at": "2018-09-18T13:38:50Z"
        },
        {
          "tag": "v5.1.1",
          "kind": "patch",
          "published_at": "2018-02-12T23:13:33Z"
        },
        {
          "tag": "v5.1.0",
          "kind": "minor",
          "published_at": "2018-02-06T13:53:05Z"
        },
        {
          "tag": "v5.0.23",
          "kind": "patch",
          "published_at": "2018-02-04T01:35:23Z"
        },
        {
          "tag": "v5.0.22",
          "kind": "patch",
          "published_at": "2017-12-23T13:17:11Z"
        },
        {
          "tag": "v5.0.21",
          "kind": "patch",
          "published_at": "2017-11-15T17:03:52Z"
        },
        {
          "tag": "v5.0.20",
          "kind": "patch",
          "published_at": "2017-10-28T20:29:31Z"
        },
        {
          "tag": "v5.0.19",
          "kind": "patch",
          "published_at": "2017-10-28T19:39:49Z"
        },
        {
          "tag": "v5.0.18",
          "kind": "patch",
          "published_at": "2017-10-28T19:33:02Z"
        },
        {
          "tag": "v5.0.17",
          "kind": "patch",
          "published_at": "2017-08-21T00:48:45Z"
        },
        {
          "tag": "v5.0.16",
          "kind": "patch",
          "published_at": "2017-07-25T19:57:30Z"
        },
        {
          "tag": "v5.0.15",
          "kind": "patch",
          "published_at": "2017-07-23T19:41:43Z"
        },
        {
          "tag": "v5.0.6",
          "kind": "patch",
          "published_at": "2017-07-23T14:12:08Z"
        },
        {
          "tag": "v5.0.4",
          "kind": "patch",
          "published_at": "2017-07-23T13:47:06Z"
        },
        {
          "tag": "v5.0.0",
          "kind": "major",
          "published_at": "2017-07-23T12:52:18Z"
        },
        {
          "tag": "v3.2.11",
          "kind": "patch",
          "published_at": "2017-05-31T02:45:04Z"
        },
        {
          "tag": "v3.2.10",
          "kind": "patch",
          "published_at": "2017-05-18T02:47:17Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a719826280d2d0396a1d67d4ff6ca4aa0481ace6",
          "body": "Post-merge release bump: master now carries the schema-GUI pipeline\n(published as 8.1.42) plus the date/time/colour picker fix. Bump\ninline_forms, inline_forms_installer and inline_forms_schema_edit to\n8.1.43 (validation_hints bumped in its own repo). 8.1.42 is already on\nRubyGems, so this is the releasable version.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Bump to 8.1.43 (all four gems in lockstep)",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-22T23:31:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "70a3649b2cf970422d76870511adee00e28dec83",
          "body": "# Conflicts:\n#\tCHANGELOG.md",
          "is_bot": false,
          "headline": "Merge branch 'feature/schema-gui-pipeline'",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-22T23:30:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0366ec658b4093aaf1bbdd2faf7ff6aa753dbb7e",
          "body": "Override the stock `release` task (not just release:all) so a stray\n`rake release` can't push to a feature branch's forgejo tracking\nremote. Both entry points now push git to origin only.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release: also route the bare `release` task through origin push",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-22T23:21:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0dbb47e6dc46315c2b47465b2b3cf882a3f5fb12",
          "body": "Bundler's release:source_control_push pushes to the current branch's\ntracking remote (branch.<branch>.remote). Feature branches here track\nforgejo (CI), so `rake release:all` from a feature branch pushed the\nrelease commit + tag to forgejo instead of GitHub.\n\nReplace it in release:all with release:p\n[…]\n(if\nneeded) and pushes the commit + version tag to origin only. Idempotent\non the tag so a re-run after a failed push still lands it on origin.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release: always push git to origin, never the branch's tracking remote",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-22T23:18:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1777fd511177b7ca490960fea8962b322f8ef8ac",
          "body": "gem_files sweeps untracked files, so keeping stuff/ out of the gem\nrelied on it being git-ignored. That ignore lived only in the\nper-machine global excludes file, absent on the release box, so\nstuff/forgejo-token (mode 0600) got swept into s.files and\n`gem build` died with Errno::EACCES during `rake\n[…]\ngitignore as a second guard.\nBump the inline_forms trio 8.1.41 -> 8.1.42 to restore lockstep\nwith the already-released validation_hints 8.1.42.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix gem_files packaging the stuff/ scratch dir; bump to 8.1.42",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-22T23:12:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a460f6854ed7b98f9de64ae9c908e79b8fbec0bb",
          "body": "stuff/ is ignored globally via ~/.config/git/ignore, so the per-repo\nentry is unnecessary.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Drop redundant stuff/ ignore; now covered by global git excludes",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-21T11:56:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6317d134a1d96f28baed99ccad3b66b4ede674f0",
          "body": "Module InlineFormsSchemaEdit, installer flag --schema-edit, rake namespace\nschema_edit:, generator inline_forms_schema_edit:install. Nothing was\nreleased under the old working name. Verified: engine suite, rubocop, and\nthe full example-app gate (171 runs green) under the new name.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Rename the gem: inline_forms_schema_gui -> inline_forms_schema_edit.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-12T05:44:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "425e087b46b56eb65d84dbb3c007e958817fea37",
          "body": "…n-submit, export/import replay, CI endpoints, apply windows.\n\nPhase 1: InlineForms::SchemaBatch + SchemaIntentRecord (install generator\nwrites the tables; installer runs it for --schema-gui apps). Drafts\naccumulate in a batch; submit freezes it (model-enforced immutability,\nsha256 content digest se\n[…]\n restart\ncommand.\n\nRoutes now come from InlineFormsSchemaGui.draw_routes(self) — one line in\nthe app, so gem upgrades can add routes without app edits.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Schema pipeline phases 1-4 (tenant side): persisted batches, freeze-o…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T21:59:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3d78d96722a4d8933c897dd35199999df63ee9bb",
          "body": "…n phase 0).\n\nThe web surface (InlineForms::SchemaController, its views, the\ninline_forms_schema layout) moves to a mountable engine gem in its own\nsubdirectory; the staging services (SchemaIntent/Preview/Apply/Label) stay\nin inline_forms. The installer gains --schema-gui (default off, implied by\n--\n[…]\nce at all. Gem joins the lockstep versioning; CI full gate builds and\ninstalls it.\n\nSee stuff/2026-07-11-schema-gui-gem-and-automated-pipeline-plan.md.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Extract the schema GUI into its own gem: inline_forms_schema_gui (pla…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T21:26:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "01816145957d68b8fb8b833dcc6a237856e385c3",
          "body": "…icators.\n\nFoundation's form reset applies `appearance: none` to date/datetime-local/\nmonth/week/time/color inputs, stripping the browser's native picker control\nfor the native pickers added in 8.1.25/8.1.26. inline_forms.scss now restores\n`appearance: auto` for those input types so the picker indicator shows again.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.42: restore native date/time/month/week/colour picker ind…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T19:10:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "25401a22a169bf371c0ce8dd7520c564c8daca88",
          "body": "…hash.\n\nChoice elements (dropdown_with_values, *_with_stars, radio_button, check_box,\nscale_*, slider_with_values, ...) require a values hash as row index 2 or their\n_edit/_show helper raises \"no values defined\". The GUI offered them but the\npreview built the row without values, so previewing e.g.\nd\n[…]\ne preview/apply pages note that a\nplaceholder is used and to edit real values in the model afterwards.\n\nFast suite + example-app gate green (170 runs).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Schema GUI: value-bearing elements preview with a placeholder values …",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T17:31:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "043bfe953488371e43da75dbf12de1662e63044c",
          "body": "Headers: a :header is a display separator with no column, so it needs no\nmigration and therefore no db:migrate (and no CheckPending block) -- it appears\non the next reload. Two parts:\n- inline_forms_addto no longer emits a migration column for :header (it wrongly\n  created a pointless string column \n[…]\ne! returns only newly-created migrations. Fast suite + example-app gate\ngreen (170 runs); header apply + label write smoke-verified in a generated app.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Schema GUI: add :header (no migration) and an optional label/locale.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T15:37:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "42e4b460e3e09712cf504bc093b4ab00b5ed4150",
          "body": "… dev flow.\n\n- :header and :info slipped into SchemaPreview.supported_form_elements (both\n  map to :string), so the GUI offered them as addable fields. Picking :header\n  made addto emit a pointless string column plus a header row. Exclude both\n  (they are not scalar fields: :header is a display sepa\n[…]\na/new after migrate + restart.\n- Tests: header/info excluded from the offered list and rejected on preview;\n  assert the data-turbo opt-out is present.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Schema GUI: stop offering :header/:info as fields; clarify post-apply…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T15:24:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "91133001575b400cd76525c66e035f030b8b26d6",
          "body": "The \"+ field\" link is intercepted by the host app's Turbo Drive session, so\nthe schema forms POSTed as turbo-stream; Turbo ignores a 200 HTML response to\na non-GET form (it only acts on turbo_stream/redirect), so Preview/Apply\nsilently did nothing despite the server rendering correctly. Set\ndata-turbo=\"false\" on the utility's <body> (and on both forms + the \"+ field\"\nlink) so the standalone dev utility does plain full-page navigations.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Fix schema GUI: opt out of Turbo so Preview/Apply POSTs navigate.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T15:03:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c366136b889af0b1171ca80c51f24bf99d218ce",
          "body": "…ld to a model.\n\nInlineForms::SchemaController (new -> preview -> create) lets you add a scalar\nattribute through the browser, building on the schema-staging services:\n\n- new: pick model (text + best-effort datalist), attribute name, form element\n  (the SchemaPreview-supported scalar set), optional \n[…]\nl in-process\ngenerate! smoke-verified in a generated app (migration written, model edited,\ncolumn absent until migrate). No version bump on the branch.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Add a dev-only schema-change GUI (example app only): add a scalar fie…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T14:54:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "29e11147412940a7844d914a8c74bd9c9244fc4a",
          "body": "… / apply).\n\nA first, tested foundation for the staging architecture in\nstuff/2026-07-11-end-user-schema-changes-staging-and-pending-gate.md. Three\nengine service objects, no UI/DB yet (persistence + controller are app-level):\n\n- InlineForms::SchemaIntent: value object for a proposed change (model,\n\n[…]\n Widget (virtual attribute readable/\nwritable with no column, row spliced at --after, base record seeded, real\ntable never altered, supported? matrix).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Stab at the end-user schema-change staging pipeline (intent / preview…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T12:40:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8734db945848e7d57b1c7bb454dac0b42feb7fa9",
          "body": "…gration).\n\nBetween `rails g inline_forms_addto Model attr:type` and `rails db:migrate`\nthe model file has the new attribute_list row but its column does not exist,\nso _show/_new (object[attr]) and #create/#update (send #{fe}_update) raise on\nthe missing column. Add InlineForms.attribute_pending_mig\n[…]\n8 runs, 0 failures) with zero\nfalse \"pending\" flags across the full form-element set (money_field,\nimage_field, devise_password_field, rich_text, ...).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Gate attribute_list rows whose column is not migrated yet (pending-mi…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T12:36:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "79f3591697169d88b32767667f2af0825dc18d3f",
          "body": "…e attribute list.\n\nIntroduces InlineForms::AttributeList < Array so it IS a valid\ninline_forms_attribute_list everywhere the old literal array was (views\nstill destructure |attribute, form_element|; helpers/validator still read\nlist.assoc(attr)[2]) — zero migration for existing models — while addin\n[…]\n merge).\n\ntest/attribute_list_test.rb covers array compatibility (destructure +\nassoc[2]), the builder, every mutator, missing-anchor errors, and wrap.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Add InlineForms::AttributeList: array-compatible DSL/container for th…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T12:20:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "da6a10a490f9f20697f9d74778ed287afc3f8d44",
          "body": "…test process.\n\nThe migration-apply test established a connection on ActiveRecord::Base\npointing at :memory:, which hijacked the dummy app's connection and made the\nengine integration tests error (delete_all against a schema-less DB). Run the\ngenerated migration on a dedicated, lazily-created named \n[…]\n not trip the dummy\napp's railtie into resolving the wrong Rails env, and named (not anonymous)\nbecause establish_connection rejects anonymous classes.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Fix inline_forms_addto scratch-sqlite test to not pollute the shared …",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T09:32:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1a80e3ba3a74c2e0c566effee2608b395c659300",
          "body": "- Smart row placement: new inline_forms_attribute_list rows land above the\n  trailing metadata block (first :info / created_at / updated_at, and a\n  :header directly above it) instead of at the very end; new --before/--after\n  options place the row explicitly and warn + fall back when the anchor is\n\n[…]\nmestamp uniqueness, and applying the generated\n  migration to an in-memory sqlite DB.\n\nLockstep: validation_hints 8.1.41, inline_forms_installer 8.1.41.\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.41: harden inline_forms_addto against the unhandled dangers.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-11T09:27:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8e0a370e45d6010366ac4d4a464b10aa3ec8e24e",
          "body": "…(workflow.md wants every commit through CI; feature branches were silently skipped).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "CI: run the test workflow on pushes to every branch, not just master …",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-10T18:28:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e1e2991058e0a193c4d83a8dde0d0ddf40965294",
          "body": "…ment model (body:text_area, belongs_to :photo, not HTML-accessible) with Photo gaining comments:has_many comments:associated, seed migration puts two comments on each apartment's first photo, and example_app_photo_comments_test covers the second-level panel, nested create, and row open/close.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.40: example app demonstrates nesting-in-nesting — new Com…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-10T16:04:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ccb6d66d29f4b2a8a46614a0ed8ddfbbd69b4a8b",
          "body": "…an :associated panel now opens the new row via Turbo Streams (Option A of stuff/2026-07-10-nested-creation-options.md), landing the user where the has_many panel is immediately usable. Dummy host app gained minimal full-layout chrome (user stub, tabs partial, MODEL_TABS) plus Machine/Part models so create/new HTML flows are testable in the engine suite.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.39: open after create — top-level create of a model with …",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-10T13:06:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "272a92ad55daed54bb93f79cba8797970310fc17",
          "body": "… safe-autocorrected (batched, tests green each step); heredoc-bearing files (generated-app code) deliberately untouched, TrailingWhitespace now AllowInHeredoc.",
          "is_bot": false,
          "headline": "Release 8.1.38: RuboCop todo shrunk 590→196 — every heredoc-free file…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-07T05:43:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "612915e6f9ce4705979ef63453a8d72ccd81b79b",
          "body": "…do eliminated; no changes here).",
          "is_bot": false,
          "headline": "Release 8.1.37: lockstep with validation_hints 8.1.37 (its RuboCop to…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T20:50:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ac4b7d517739f0ecebb37037ea51eb9fc127981",
          "body": "…ly Brakeman baseline finding); Brakeman default checks now enforcing in full-gate CI.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.36: generated apps force SSL in production (closes the on…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T18:03:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "be738d2ebcee24692fb15fb19798704b34db8fbd",
          "body": "…gitignored pics/ folder only existed on the maintainer box; CI full-gate seeded zero photos and failed 12 tests).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.35: ship the 9 seed gallery images inside the installer (…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T17:23:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e9297f0497818f4f964c7b24445f195095f47c35",
          "body": "…itial commit failed without one).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "full-gate CI: set a git identity in the job container (installer's in…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T16:58:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "01d1e04bede0c1dac9b0a750bac41786ada9beb5",
          "body": "…cret Ace created).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "CI: sibling-checkout secret is named VALIDATION_HINTS (matches the se…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T16:49:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "10b62ece7f8e9336de962137b1828cf3420ce89d",
          "body": "…Brakeman on the generated app), RuboCop omakase baseline; remove GitHub workflows.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.34: Forgejo Actions CI (per-push + weekly full gate with …",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T14:23:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cf613fc996f682ac344d8d8a7eafa72b9a2abc0e",
          "body": "…r theming/locale, showcase model).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.33: README refresh (vendored tabs, native inputs, per-use…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T13:11:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bcda1e92b52834f3d8f51c70f5e6ac3e67aa7250",
          "body": "…lor_field form element.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.32: theming Pattern 2 (per-user color overrides) + new co…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T13:06:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8400e8409594351e1dce26577654676858bb46da",
          "body": "… clobbering I18n.available_locales.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.31: per-user locale via around_action switch_locale; stop…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T12:58:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "51a6a07f97cb46e89d224b64134ed9788a86c605",
          "body": "…m elements.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.30: archive app-specific question_list and dnsrecords for…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T12:53:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2174d9832637912c88d9d9e1612c0ae7053fd780",
          "body": "…the CSS-variable bridge.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.29: per-user preset themes (dark/sepia/high-contrast) on …",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T12:49:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "17c44717eba576d1a0501262218a3e319ae3b87e",
          "body": "…pload fixes; attribute_values error-path fix.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.28: multi_image_field showcase gallery + array/multiple-u…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T12:39:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0eb692e7c0b359d7227b9b0d49e92bfa578e7ae7",
          "body": "…ent cancan-less and role-less host crashes found by the harness.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.27: test/dummy integration harness + CI workflow; fix lat…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T12:31:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "55fc8550f2fdb79b102a5b3d78d4bc2b21bb3941",
          "body": "…down_with_other, native range slider); drop jquery-ui-rails and rails-jquery-autocomplete.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.26: remove jQuery UI entirely (datalist combobox for drop…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T12:15:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1e2ebf2045cb57cf310d019ee54803ece62610ff",
          "body": "…rs; drop jquery-timepicker-rails.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.25: native date/time/month inputs replace jQuery UI picke…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T12:06:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb862d3e610791f6cdd0385226dcd021f797857e",
          "body": "…dation_icons via @use; color.adjust.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.24: CSS custom-property theme bridge (--if-color-*); foun…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T11:58:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6e1029d0af04e2199a4522a4ad651d6753b2fd61",
          "body": "…ained tabs_on_rails dependency.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.23: vendor tabs support (InlineForms::Tabs), drop unmaint…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T11:44:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "387c59453aba9d12d166f33c5218b1829d95b5b8",
          "body": "…ons font 404, pin cancancan/will_paginate.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.22: vendor Trix 2, self-host Open Sans, fix Foundation Ic…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-07-06T11:36:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a79797803317dab68015da7ed6489729b5ea3ec5",
          "body": "…_area_without_ckeditor.\n\nModels still declaring either symbol now raise ArchivedFormElementError at boot; migrate to :rich_text or :plain_text / :plain_text_area.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.21: retire CKEditor-era form elements :ckeditor and :text…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-06-03T10:35:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2ceaf7666007d466b6991df4e60e512eb99e783",
          "body": "…nts.\n\nThe FormElementShowcase price (bare numericality: true) and amount\n(money-rails monetize) labels rendered an empty validation-hints-source\ndiv. With validation_hints 8.1.20 fixing the bare-numericality dead-code\nbug, price now shows \"must be a number\" and amount shows \"must be a valid\namount\"\n[…]\n\n8.1.19 edit-stays-open-on-failure behavior.\n\nAdds example_app_showcase_validation_hints_test.rb asserting non-empty\nhint lists for count/price/amount.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.20: price/amount showcase labels now render validation hi…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-29T21:25:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "96721406a8627e3cb9c54bbce0f4a2341f3aa085",
          "body": "InlineFormsController#update ignored the return value of @object.save and\nalways re-rendered field_show from the in-memory @object. When a save\nfailed validation the user saw a \"saved\" show of the unsaved value while\nthe DB kept the old value; re-opening the edit revealed the stale value.\n\nupdate no\n[…]\ny-rails refusing \"99.ace99\") stays visible instead of silently\nreverting. General fix for every form element, not just money_field.\n\nAdds example_app_showcase_money_update_test.rb regression coverage.",
          "is_bot": false,
          "headline": "Release 8.1.19: inline update no longer fakes success on save failure.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-29T01:39:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "481db396cba1883b2e72305048f2fd2ab3e3a895",
          "body": "…_select revert.\n\nRVM decoupling (now a real choice, not a hard requirement):\n- inline_forms_installer no longer hard-depends on the `rvm` gem, and\n  `inline_forms create` no longer unconditionally `require`s it (new memoized\n  Creator#rvm_active? guards the require). RVM gemset integration runs onl\n[…]\n\n  (revert) and round-trips its changeset (versions panel) without raising.\n\nExample-app gate: 136 runs, 843 assertions, 0 failures, 0 errors, 0 skips.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.18: make RVM optional; fix Psych::DisallowedClass on time…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T23:54:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a2da41f840bd6d9e6e5a959464df925514ae1702",
          "body": "Reverting a PaperTrail destroy version reifies a record with the original\nprimary key and new_record? == true. The normal undo (row deleted) path\nINSERTs it correctly, but the versions panel also offers Restore on destroy\nrows (non-empty changeset), and once the row is already restored a blind\nsave!\n[…]\nto it\nand saved in place, so restoring a destroy version is idempotent.\n\nAdds a regression test restoring a Photo destroy version while the row exists.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.17: fix duplicate photos.id on destroy-version restore.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T22:57:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "adc57c21a54c8d3be27bf1356cbebb4e7e9f8b8a",
          "body": "Upsert rich text by record+name and apply only the latest destroy version.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.16: fix duplicate ActionText id on repeat undo.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T22:31:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a50d4d59c2c56446c69a19f271b95dc61325694a",
          "body": "Apartment/Photo description lives in action_text_rich_texts; undoing a\nparent destroy must reify matching ActionText::RichText destroy versions.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.15: restore ActionText on parent destroy undo.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T22:15:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ca5cf52cc2dcef7522742d3d32591524f72029b1",
          "body": "The Empty-demo regression used /revert/:id but routes are\n/form_element_showcases/:id/revert, which broke --example installs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.14: fix showcase undo test URL assertion.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T22:08:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "081b0ff8861b9eb1bbd60b0a7ecddc8cadb56062",
          "body": "Capturing versions.last before destroy pointed undo at the latest update,\nso revert rolled back plain_text_area edits instead of restoring the row.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.13: undo targets destroy PaperTrail version.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T19:00:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "da440351fb6275e02a2a9fa01feb2413e3462549",
          "body": "revert excluded load_and_authorize_resource but authorize! only ran on\nsome branches; post-delete undo now requests turbo_stream like Restore.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.12: fix CanCan authorization on revert/undo.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T18:52:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "14cdd0865e553672f4a56e28ba3fe56eb6a991fa",
          "body": "Fixed\n- Installer's prerelease gem discovery now looks in pkg/ too.\n  Bundler::GemHelper.install_tasks (the standard Rakefile boilerplate)\n  puts `rake build` output in pkg/, not in the checkout root where\n  `gem build` writes. 8.1.10's dev_checkout_with_gems and\n  install_prerelease_gems_from_roots\n[…]\nere only to keep the version trio in step.\n\nGate: 128 runs / 782 assertions / 0 failures / 0 errors / 0 skips\n(73s wall-clock with PARALLEL_WORKERS=2).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.11: installer pkg/ discovery + capped test parallelism.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T18:41:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce2b2e48664c4dde38539bab1b4b07957bcbe97d",
          "body": "Changed\n- :decimal_field maps to :decimal (was :string) in FormElementRegistry.\n  rails g inline_forms Foo price:decimal_field now emits\n  t.decimal :price, precision: 10, scale: 2 — the sensible default for\n  invoice/balance-shaped data up to 99,999,999.99. Closes the\n  long-standing inconsistency \n[…]\nforms / inline_forms_installer / validation_hints all bumped\n  from 8.1.9 to 8.1.10.\n\nGate: 128 runs / 782 assertions / 0 failures / 0 errors / 0 skips.\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.10: decimal_field becomes a real decimal(p,s) column.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-28T00:49:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "83ef47352dec272335e110ca39efee887dfe72a5",
          "body": "…M showcase.\n\nFixed\n- `dropdown_with_values_show` / `dropdown_with_values_info` no longer\n  double-translate labels (`attribute_values` already runs `t()`). The\n  second `t()` call was using the already-translated string as an i18n\n  key, so a missing translation rendered the bizarre\n  `<span class=\n[…]\n_forms / inline_forms_installer / validation_hints all bumped\n  from 8.1.8 to 8.1.9.\n\nGate: 119 runs / 742 assertions / 0 failures / 0 errors / 0 skips.\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.9: dropdown double-translation, money cents, locales HABT…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-27T22:45:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d3e624cb69d4d9fb8a67264b54de342c8ed85354",
          "body": "…es to FormElementShowcase.\n\n8.1.6 dropped these three Tier 1 helpers from the example showcase because\ntheir `_show` methods crashed on any non-trivial value. 8.1.7 repaired the\ntwo scale helpers (`Array#assoc` instead of positional `Array#[N]` against\nthe `[[key,label],…]` pairs returned by `attri\n[…]\n errors, 0 skips\n(was 113 / 706 in 8.1.7). Versions bumped 8.1.7 → 8.1.8 across\ninline_forms, inline_forms_installer, and validation_hints in lockstep.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.8: re-add money_field/scale_with_integers/scale_with_valu…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-27T20:24:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "58d24ad51431a488e5b30df9d00217d2a7eb258e",
          "body": "…ker.\n\nThree Tier 1 `_show` helpers (`dropdown_with_integers`, `scale_with_integers`,\n`scale_with_values`) used `Array#[N]` against the `[[key, label], …]` array\nreturned by `attribute_values` and indexed positionally instead of by key,\nso the stored integer was treated as an offset. `rating_int = 3\n[…]\nassertions, 0 failures, 0 errors, 0 skips.\nVersions bumped 8.1.6 → 8.1.7 across inline_forms, inline_forms_installer,\nand validation_hints in lockstep.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.7: fix three crashing show helpers + Versions header flic…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-27T18:50:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cac0852e04047007c517a4d834309f4e917fb314",
          "body": "Adds a fourth example resource, FormElementShowcase, to the\n--example install that exercises every kept Tier 1 form_element\nhelper on a single object (text_field, plain_text_area,\ninteger_field, decimal_field, date_select, time_select,\nmonth_select, month_year_picker, check_box, radio_button,\ndropdo\n[…]\nshly built 8.1.6 gem trio.\n\nDropped (helpers broken; documented in CHANGELOG): money_field\n(needs money-rails), scale_with_integers, scale_with_values.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.6: FormElementShowcase example resource.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-27T14:37:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "228f0e427ece707ff814403fd7f752f102504635",
          "body": "Hard-breaking change. Each row in `inline_forms_attribute_list` is now\n2 elements (was 3), and 4-/5-element rows for dropdown_with_values /\nradio_button / scale_* / slider_* / check_box / simple_file_field drop\ntheir empty 2nd element. Labels have come from\n`Klass.human_attribute_name(attribute)` vi\n[…]\nm trio: install in ~73s, bundle\ncheck: ok, 88 runs, 502 assertions, 0 failures, 0 errors, 0 skips.\nGem unit tests: 42 runs, 240 assertions, 0 failures.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.5: drop empty label from inline_forms_attribute_list rows.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-27T10:48:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "135fa4f021f484202148d57b710a8c647d41bbfa",
          "body": "Fixes two long-standing bugs in the installer-generated app, both\nexposed when running the 8.1.3 example app:\n\n1) Search on /users (or /members with -U Member) silently no-op'd\n2) The top-bar \"More\" dropdown was always empty\n\nUser-model search scope\n-----------------------\n`lib/inline_forms_installe\n[…]\ntall in\n~79s, same green suite, initializer carries\n`MODEL_TABS = %w(owners apartments roles locales members )`,\nMember model carries the search scope.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.4: search scope on User/Member + populate MODEL_TABS.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-26T22:22:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bc76ef804f555efec1381f511b2b8414ad87881d",
          "body": "PaperTrail 17.0 (generated app Gemfile)\n---------------------------------------\n`lib/inline_forms_installer/installer_core.rb`: bump\n`gem 'paper_trail', '~> 16.0'` -> `'~> 17.0'`. PT 17 officially\nsupports Rails 8.1 (it drops Rails 6.1 / 7.0 and Ruby 3.0 / 3.1,\nall out of scope for this gem) and sil\n[…]\ntall in ~71s.\nExample regression suite: 88 runs, 502 assertions, 0 failures,\n0 errors, 0 skips. Engine unit suite: 42 runs, 240 assertions,\n0 failures.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.3: PaperTrail 17.0 + -U collision check.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-26T22:04:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "457082bd54df42c00a0c4162f27878b087ac8390",
          "body": "Engine + installer move from `rails ~> 8.0` to `rails ~> 8.1`\n(Bundler resolves 8.1.3). Companion gem `validation_hints` is bumped\nin lockstep and constrained to `>= 8.1.2, < 9.0` so Active Record\n8.1 satisfies its dependency.\n\nEngine (`inline_forms`):\n- gemspec: `rails >= 8.1, < 8.2`, `rails-i18n >\n[…]\nduring `--example`: 88 runs, 502\n  assertions, 0 failures, 0 errors, 0 skips. Standalone\n  `bundle exec rails test` reproduces the same result (~1.9s).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.2: migrate to Rails 8.1.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-26T21:25:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "024b1921719fdd9893278f61b30896e979f3a687",
          "body": "…ng models.\n\nNew generator emits an additive migration (add_column / add_reference /\nsingle :string for image_field) and edits the model file (associations,\nhas_rich_text, mount_uploader, new rows in inline_forms_attribute_list)\nwithout touching routes, controller, or MODEL_TABS. Handles both the\nge\n[…]\nd by both generators.\n\nVerified: 42 unit tests, 88/502 example-app tests at inline_forms 8.1.1\n+ inline_forms_installer 8.1.1 + validation_hints 8.1.1.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.1: rails g inline_forms_addto for adding fields to existi…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-26T15:16:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4fd5167e167f3fb928ad7733179bcb246fe407c4",
          "body": "…_by_clause with inline_forms_list/inline_forms_search scopes.\n\n- ApplicationRecord template carries has_paper_trail, attr_writer\n  :inline_forms_attribute_list, self.per_page = 7, human_attribute_name\n  wrapper, default not_accessible_through_html?. Generated models only\n  emit per-model difference\n[…]\n_forms.scss`\n  mirror. inline_forms_devise.css stays (host-app override hook).\n- Bump gemspec dep: validation_hints >= 8.1.0, < 9.0 (lockstep release).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.1.0: ApplicationRecord shared model behavior; replace order…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-26T00:50:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "93c19fcf93fae358e3b94d0c60e011f93300886a",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Require validation_hints >= 8.0.4 for 8.0.4 release line.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-24T19:06:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "31cdc8ac40a923db742a72e6e9b66a4596a25672",
          "body": "Lets installers generate Member (or other) auth models while keeping\nDevise mapping :users so current_user and inline_forms helpers work.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Add --user-model to inline_forms create (8.0.4).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-24T11:05:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2001c6904c92c523b7025c93820b9246d6a9349e",
          "body": "Add release and zeitwerk guides; fix gemspec summary; record example app gate.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Phase 5: Rails 8 release docs, Zeitwerk audit, gemspec copy.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-22T23:44:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d1aeca3fc66d1a9086e2b3601ea1db17ec109710",
          "body": "Document framework defaults, fix Unicorn connection_pool disconnect,\nupdate README for Rails 8 stack, and tighten validation_hints pin.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.0.3: Rails 8 Phase 4 framework audit and cleanup.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-22T22:37:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b6c0bd9b6451dfba05c91f84f8e621cc5332ca43",
          "body": "inline_forms create uses rails 8.0.x, load_defaults 8.0, Migration[8.0],\nand sqlite3 >= 2.1; pre-installs local .gem builds before bundle; adds\nSprockets manifest.js for Rails 8 importmap apps.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.0.2: Rails 8 installer (Phase 3).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-22T21:47:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d1344626594d9f423ec5cfcd389a06bfaaf4cd0b",
          "body": "Gemspec: rails and rails-i18n >= 8.0, < 8.1/9; validation_hints >= 8.0.1.\nGenerator migrations use [8.0]. Installer template still 7.2 until Phase 3.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Phase 2: inline_forms engine on Rails 8.0 (8.0.1).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-22T21:26:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "452d7df74ea4ade186ac0b5ea7ed49f4e57de3ab",
          "body": "Bump inline_forms and inline_forms_installer to 8.0.0; pin validation_hints\nand inline_forms at ~> 8 in gemspecs and installer (Rails stack still 7.2.x).\nFix generator tests (Gemfile, test_helper, add_tab destination_root).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 8.0.0: 8.x version line, Phase 0 baseline fixes.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-22T20:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5a9c8c852b1cb893891ff1744573d873d731a015",
          "body": "Generated apps no longer scaffold locale/key/translation tables or the\ntranslations SQL view. Drop TranslationRecord, extract_translations, and\nrelated installer/controller code; use Rails I18n YAML only.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Remove DB-backed translations; release 7.13.18.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-22T16:44:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c5103c02c510d73b9f2e15734410d1391ed87169",
          "body": "The \"Creating MyApp with inline_forms vX...\" banner used\n`Gem::Specification.find_by_name(\"inline_forms\").version`, i.e. whatever\nhappened to be in the Creator's own gemset, which can differ from what\nBundler actually resolves for the new app (the Gemfile pins `~> 7`).\n\n- Banner now says `inline_for\n[…]\n banner reports `~> 7`,\nsummary reports the locked engine version (7.13.16 today since 7.13.17\nis not yet on RubyGems), bundle check ok, 91 tests pass.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Report Bundler-locked versions in create banner + summary (7.13.17).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T23:54:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d0c637247d5798ca164bc6bab6e0ab141e52cf00",
          "body": "The 7.13.15 helper guarded with `defined?(RVM) && RVM.current` BEFORE\n`require \"rvm\"`. Inside the `rails new` subprocess (which has not loaded\nthe rvm gem) that returned early and the gemset was never switched, so\n`bundle install` and the example tests installed gems into the parent\ngemset (e.g. @te\n[…]\nuby-gemset` is written. Verified with\n`inline_forms create MyApp -d sqlite --example`: gems land in @MyApp,\nbundle check ok, 91/505 example tests pass.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Fix RVM gemset switch in installer subprocess (7.13.16).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T23:27:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5f52270436f585e83d6df450ff28ec24f8eee2a0",
          "body": "Switch to the app gemset only after .ruby-gemset exists so bundle\ninstall targets @MyApp, and run the install-summary bundle check there.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Fix RVM gemset activation during inline_forms create (7.13.15).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T23:10:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2b265d13afb2025619c894764019075c45f3286a",
          "body": "Read the install log file instead of splitting the path string, tee all\noutput through one temp log before moving to MyApp/log, and write the\nheader/summary into the log the terminal shows.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Fix install log summary and test result parsing (7.13.14).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T12:45:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3f688be99865831593aa629a3ac0010d86c1b940",
          "body": "Timestamped MyApp/log/inline_forms_create-*.log with start/end path and\nsummary; foreman in Gemfile; validation_hints only via VALIDATION_HINTS_ROOT;\ngenerator tab idempotency; Rails 8 checklist Sass note.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.13: install log, --example runs tests, installer UX picks.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T10:26:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1b0f41dd00e666403699891896759d45828905a3",
          "body": "bundle_install! runs bundle check after install; Creator reminds to\nrvm use . before rails test. Three-gem lockstep with validation_hints.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.12: abort create when bundle install fails.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T01:57:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eda8441bf36f8315735dc6b7c677c329841f2805",
          "body": "Document that release does not generate MyApp; validation_hints is a\nseparate repo release.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Fix release:all: build and push only, no install:local.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T00:41:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3042840480d898b57260cc3ee773a23908677825",
          "body": "Install freshly built gems from pkg/ so inline_forms create uses the\ncurrent installer template, not an old RubyGems inline_forms_installer.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.11: rake install:local before release:all.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T00:36:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a24312c0caecd738b5ced32629d864ca06d90f86",
          "body": "Generated apps resolve the highest 7.x for inline_forms and\nvalidation_hints; drop installer/engine version match at install time.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.10: Gemfile and gemspec pins at ~> 7.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T00:32:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "487a79714262d0167925dfd24323eaf5ccae5dd7",
          "body": "Align inline_forms and inline_forms_installer at 7.13.9; installer depends on\nmatching inline_forms; Creator aborts on version skew; README documents CLI\ninstall and validation_hints pairing.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.9: three-gem lockstep, installer/engine version guard.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-21T00:26:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7544567a16ba7a4dceb7066ef86d766928b66aee",
          "body": "- README.rdoc: new \"Where to put the tabs_tag block (five patterns)\"\n  subsection under == Per-resource Turbo tabs. Each pattern ships a\n  runnable code snippet + a \"best when ...\" line: (1) inlined in the\n  show view, (2) dedicated tab-strip partial -- the --example app's\n  pattern, (3) helper-driv\n[…]\nler set_tab +\n  params[:tab]) and that InlineForms::TurboTabsBuilder is\n  independent of the partial layout chosen.\n- CHANGELOG.md / VERSION -> 7.13.8.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.8: README five-pattern guide for Turbo tab strips.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-20T14:31:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6c6f75f79e899a914e73597d49fa37db8fe52c35",
          "body": "… tabs + check_list.\n\n- installer_core.rb: drop SeedKonferenshaPhotos, generate\n  SeedExampleApartmentsAndOwners (3 apartments Apt 1/2/3 with\n  per-apartment photo galleries; 3 owners -- Maria owns Apt 1+2,\n  Jean-Pierre owns Apt 3, Akira owns none) so the new per-owner\n  check_list panel has zero /\n[…]\nr seed sets).\n- README.rdoc documents seed data, the :check_list switch, and the\n  Foundation tabs markup contract.\n- CHANGELOG.md / VERSION -> 7.13.7.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.7: seeded Owner/Apartment demo + Foundation-styled Turbo…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-20T13:57:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bb56a762c858bf8ce466d795f039f6639b22a9c5",
          "body": "Adds an Owner model to the --example app along with a per-resource Turbo\nsub-tab UI for /owners/:id. An Owner has_many Apartments; an Apartment\nbelongs_to a single (optional) Owner and surfaces the owner as a\n:dropdown in its inline_forms_attribute_list. The two sub-tabs (\"naw\"\nand \"apartments\") ren\n[…]\nd at /owners/:id: tabs partial-swap\nvia Turbo (no full page reload), shared :name field appears on both\ntabs, /apartments shows the new Owner dropdown.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.6: Owner example + InlineForms::TurboTabsBuilder.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-20T13:17:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "14008d00ca8ee9a4e7a547978a569d4a07c3dc76",
          "body": "Generated apps use RubyGems tabs_on_rails ~> 3.0 and InlineForms::TranslationRecord\ninstead of acesuares git deps; will_paginate fork comment removed.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.5: drop git forks for tabs_on_rails and i18n-active_record.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-20T12:25:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "64a80e80d5b91bfb15c1709b51d05709908e23b2",
          "body": "…t row (symmetry fix).\n\nUser-reported asymmetry: \"If I make a rich text description in Apartments\nI can restore the empty value. If I make a rich text description in the\nnested Photo, then I can not restore the empty value.\"\n\nRoot cause: the visible difference was a side effect of how each example\nf\n[…]\nler::VERSION` -> 7.13.4.\n\nVerified: `inline_forms create MyApp -d sqlite --example` ->\n`bundle exec rails test` -- 83 runs, 461 assertions, 0 failures.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.4: Restore on rich_text create now destroys the rich_tex…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T21:47:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5f651c045ed841e3a8df1c60e67c221ca052b763",
          "body": "…ty changesets.\n\nAfter a record with a `rich_text` attribute is saved (e.g. creating a Photo\nwith a `description`), the parent gained a spurious PaperTrail `update`\nversion whose changeset was `{}`. Restoring that row reified the same\nstate and persisted it — a visible no-op in the versions panel. R\n[…]\nrmed in `bundle exec rails runner`: `Photo.create!(... description: ...)`\nyields only a single `create` version on Photo (no empty `update` follow-up).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.3: suppress PaperTrail :touch noise; hide Restore on emp…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T21:09:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d5b806bed17652c66a3047dc11148757c67da10",
          "body": "…ersion.\n\nPaperTrail::Version#reify returns nil for `create` events (no prior state),\nso InlineFormsController#revert was falling through to `@parent.save!` on\nnil and raising `NoMethodError: undefined method 'save!' for nil`. The\ncrash was most visible when reverting an ActionText (`rich_text`) cre\n[…]\n into generated Gemfiles).\n\nVerified: `inline_forms create MyApp -d sqlite --example` →\n`bundle exec rails test` — 79 runs, 441 assertions, 0 failures.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.2: fix NoMethodError when reverting a rich_text create v…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T20:54:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3f80e0b044ec91d6d9ac5e92e2d45f0e96dd1177",
          "body": "Rails 7.2 rackup only auto-selects puma/falcon/webrick; thin and unicorn require -u.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.1: add puma so generated apps boot with rails s.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T20:02:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1e283973eaa5bbd6017eb160a097f3156b95920f",
          "body": "Move form elements into InlineForms::FormElements::*Helper modules with explicit boot loading and registry-based SPECIAL_COLUMN_TYPES; views and controllers keep the same *_show/*_update API.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.13.0: Track B Zeitwerk form elements refactor.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T19:38:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "34c300626548e6926cab028534b34765bb33261d",
          "body": "… and Ruby 4.0.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.12.0 for inline_forms and inline_forms_installer: Rails 7.2…",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T19:18:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c94b2e3830bb5ee24224c51bb74d6c9db263c8c0",
          "body": "Correct the mistaken 7.5.0 bump (below 7.10.2 and reusing an old tag);\n7.11.0 is the next minor after 7.10.x for the installer split.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.11.0 for inline_forms and inline_forms_installer.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T18:53:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "07742f7b984a0b27b973d12097e6c52aa61e2a81",
          "body": "Specify inline_forms as the default gem name and add installer:* plus\nrelease:all for publishing both gems from one tag.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Fix rake release for monorepo with two gemspecs.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T18:48:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7d132c87f45b89059e16ebe521c6bbf77d2739e1",
          "body": "Align both gem versions after splitting the installer out of the engine.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.5.0 for inline_forms and inline_forms_installer.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T18:46:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f999165baad9eccbfd095ec8d8359f27937a09b2",
          "body": "Separate the CLI and Rails app template from the engine so runtime\ndependencies stay lean and releases can move independently.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Split app installer into inline_forms_installer gem.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T17:27:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "26d704a1043c6ee4dee9844b0c95275ac680d514",
          "body": "Generator pins opening_date:date on Apartment, Konferensha seed sets a sample date, and new integration test asserts the datepicker class hook on show, inline edit, and new form. Browser-verified end-to-end.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Add opening_date (date) to example Apartment for datepicker coverage.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T16:27:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dd28117e2c287c98f5fef5378b0f1a162e111d55",
          "body": "Pin Rails 7.1 in gemspec/installer; install local validation_hints gem before first bundle when ~> 6.3 is not on RubyGems yet.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Rails 7.1 example app and validation_hints 6.3 install hook (Phase 5).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T01:14:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "299f8cdfd6f3662cb9f486808d13cac7d87a95d7",
          "body": "initInlineFormsWidgets binds datepicker, month/year picker, timepicker,\nTrix, and validation-hint Tippy on DOM ready, turbo:load, and\nturbo:frame-load. Date/time/month_year_picker edit helpers no longer\nemit inline script tags.\n\nAdd docs/jquery-widgets.md tracking remaining jQuery dependencies.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.9.8: Phase 4 centralized jQuery widget init.",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T00:59:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4c78cd263a1deefb98896de6c508bcc9c827c93e",
          "body": "Document current format.turbo_stream usage in docs/turbo-stream-audit.md.\nNote built *.gem artifacts stay gitignored.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Release 7.9.7: Phase 3 hygiene (turbo-stream audit doc).",
          "author_name": "Ace Suares",
          "author_login": "acesuares",
          "committed_at": "2026-05-19T00:56:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 100,
      "commits_last_year": 165,
      "latest_release_at": "2026-07-22T23:31:52Z",
      "latest_release_tag": "v8.1.43",
      "releases_from_tags": true,
      "days_since_last_push": 0,
      "active_weeks_last_year": 9,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 6.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "inline_forms",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "rubygems",
          "matches_repo": true,
          "registry_url": "https://rubygems.org/gems/inline_forms",
          "is_deprecated": false,
          "latest_version": "8.1.43",
          "repository_url": "http://github.com/acesuares/inline_forms",
          "versions_count": 427,
          "total_downloads": 1143265,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2011-01-27T14:10:39.790000Z",
          "latest_published_at": "2026-07-22T23:33:24.935000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "inline_forms_installer",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "rubygems",
          "matches_repo": true,
          "registry_url": "https://rubygems.org/gems/inline_forms_installer",
          "is_deprecated": false,
          "latest_version": "8.1.43",
          "repository_url": "http://github.com/acesuares/inline_forms",
          "versions_count": 36,
          "total_downloads": 6502,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-05-19T19:00:27.222000Z",
          "latest_published_at": "2026-07-22T23:33:28.047000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "inline_forms_schema_edit",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "rubygems",
          "matches_repo": true,
          "registry_url": "https://rubygems.org/gems/inline_forms_schema_edit",
          "is_deprecated": false,
          "latest_version": "8.1.43",
          "repository_url": "http://github.com/acesuares/inline_forms",
          "versions_count": 2,
          "total_downloads": 259,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-07-22T23:24:18.072000Z",
          "latest_published_at": "2026-07-22T23:33:30.308000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 15,
      "stars": 24,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2012-05-28",
            "count": 1
          },
          {
            "date": "2012-12-01",
            "count": 9
          },
          {
            "date": "2013-06-10",
            "count": 1
          },
          {
            "date": "2014-12-23",
            "count": 1
          },
          {
            "date": "2015-01-24",
            "count": 1
          },
          {
            "date": "2015-03-14",
            "count": 1
          },
          {
            "date": "2017-10-29",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 15,
        "total_forks": 15
      },
      "star_history": null,
      "open_issues_and_prs": 7
    },
    "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": [],
      "largest_source_bytes": 74312,
      "source_files_sampled": 175,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Gemfile"
      ],
      "advisories": {
        "error": "No resolved dependencies carried a version and a supported ecosystem",
        "scope": "repository_graph",
        "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": 12,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "rubygems"
      ],
      "dependencies": [
        {
          "name": "validation_hints",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "validation_hints",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "inline_forms",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "inline_forms_schema_edit",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "minitest",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "paper_trail",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "rails",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "rails-i18n",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-rails-omakase",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "sqlite3",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "thor",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "turbo-rails",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "will_paginate",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 12,
        "direct_count": 1,
        "indirect_count": 11
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 34,
        "open_issues": 7,
        "closed_ratio": 0.125,
        "closed_issues": 1,
        "closed_unmerged_prs": 5
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "acesuares",
          "commits": 278,
          "avatar_url": "https://avatars.githubusercontent.com/u/2784?v=4"
        },
        {
          "type": "User",
          "login": "royendgel",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/1261046?v=4"
        },
        {
          "type": "User",
          "login": "rhymiz",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/7029352?v=4"
        },
        {
          "type": "User",
          "login": "careljonkhout",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/301439?v=4"
        },
        {
          "type": "User",
          "login": "coryschires",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/104563?v=4"
        }
      ],
      "contributors_sampled": 5,
      "top_contributor_share": 0.933
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [
        ".rubocop.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a719826280d2d0396a1d67d4ff6ca4aa0481ace6",
        "ran_at": "2026-07-23T00:48:54Z",
        "aggregate_score": 3.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2018-02-09T20:21:46Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 14,
          "created_at": "2014-09-03T18:13:08Z",
          "last_comment_at": "2014-09-03T21:01:07Z",
          "last_comment_author": "acesuares"
        },
        {
          "number": 42,
          "created_at": "2018-09-19T14:20:15Z",
          "last_comment_at": "2018-09-19T14:24:12Z",
          "last_comment_author": "ortegacmanuel"
        },
        {
          "number": 43,
          "created_at": "2018-09-24T10:57:42Z",
          "last_comment_at": "2018-09-27T15:41:59Z",
          "last_comment_author": "ortegacmanuel"
        },
        {
          "number": 44,
          "created_at": "2018-09-24T12:11:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 45,
          "created_at": "2018-09-27T13:37:05Z",
          "last_comment_at": "2018-09-27T16:00:31Z",
          "last_comment_author": "ortegacmanuel"
        },
        {
          "number": 46,
          "created_at": "2018-09-27T14:34:41Z",
          "last_comment_at": "2018-09-27T15:51:48Z",
          "last_comment_author": "ortegacmanuel"
        },
        {
          "number": 47,
          "created_at": "2018-09-27T15:58:14Z",
          "last_comment_at": "2018-09-27T15:58:57Z",
          "last_comment_author": "ortegacmanuel"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/acesuares/inline_forms",
    "host": "github.com",
    "name": "inline_forms",
    "owner": "acesuares"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 54,
      "inputs": {
        "security": 39,
        "vitality": 77,
        "community": 50,
        "governance": 51,
        "engineering": 50
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 77,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "commits_last_year": 165,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 9
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "9/52 weeks with commits",
                "points": 6.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "165 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 165
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v8.1.43",
              "releases_from_tags": true,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 6.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~6.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 6.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "forks": 15,
              "stars": 24,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "24 stars",
                "points": 22.1,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "15 forks",
                "points": 9.6,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "packages": [
                "inline_forms",
                "inline_forms_installer",
                "inline_forms_schema_edit"
              ],
              "dependents": null,
              "ecosystems": "rubygems",
              "total_downloads": 1150026,
              "monthly_downloads": null
            },
            "components": [
              {
                "key": "total_downloads",
                "name": "Total downloads",
                "detail": "1,150,026 downloads all-time across rubygems",
                "points": 63,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_total",
                    "params": {
                      "count": 1150026,
                      "ecosystems": "rubygems"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 51,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 23,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 5,
              "top_contributor_share": 0.933
            },
            "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 93% of commits",
                "points": 1.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 93
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "5 contributors",
                "points": 6.8,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 39,
            "inputs": {
              "merged_prs": 34,
              "open_issues": 7,
              "closed_issues": 1,
              "issue_closed_ratio": 0.125,
              "closed_unmerged_prs": 5
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "12% of issues closed",
                "points": 5.8,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 12
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "34/39 decided PRs merged",
                "points": 33.3,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 34,
                      "decided": 39
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "followers": 33,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "acesuares",
              "public_repos": 48,
              "account_age_days": 6707
            },
            "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": "33 followers of acesuares",
                "points": 11,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 33,
                      "login": "acesuares"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "48 public repos, account ~18 yr old",
                "points": 24.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 48
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 18
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "inline_forms",
                "inline_forms_installer",
                "inline_forms_schema_edit"
              ],
              "ecosystems": "rubygems",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "3 package(s) on rubygems",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 3,
                      "ecosystems": "rubygems"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "427 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 427
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 50,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".rubocop.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".rubocop.yml"
                    }
                  }
                ],
                "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": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": 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": "at_risk",
        "name": "Security",
        "value": 39,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 39,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 3.9
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 6
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 46,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.92,
              "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": "92 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 92,
                      "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": 48,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.96,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".rubocop.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".rubocop.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "96 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 96,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Ruby",
              "largest_source_bytes": 74312,
              "source_files_sampled": 175,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Ruby without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Ruby"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/175 source files over 60KB",
                "points": 54.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 175,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T00:48:59.995989Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/acesuares/inline_forms.svg",
  "full_name": "acesuares/inline_forms",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenRubyGems.