Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-27 04:59 UTC

inixiative / rules-builder

TypeScriptMIT★ 0 Sterne⑂ 0 Forksseit Feb. 2026Auf GitHub ansehen ↗

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

50
gesamt / 100
Mittel

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

InixiativeOrganisation
4 Follower15 öffentliche Reposseit Juni 2025

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npm@inixiative/rules-builder0.21.015.33819vor 6 Tagenjson-rulesrule-buildervisual-editorreactform-builder

Metriken nach Kategorie

Vitalität

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

41Gefährdet · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 6 Tagen
4.2/36Commit-Rhythmus — 6/52 Wochen mit Commits
18/18Commit-Volumen — 100 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_year100
human_commit_share1
days_since_last_push6
active_weeks_last_year6
Wie die Bewertung erfolgt
0/27Liefert Releases aus — keine Releases veröffentlicht
0/36Release-Aktualität — keine Releases
0/27Release-Rhythmus — keine Releases
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count0
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?

35Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
55.8/80Downloads pro Monat — 15.338 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@inixiative/rules-builder
dependents
ecosystemsnpm
total_downloads
monthly_downloads15.338
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?

56Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
5.4/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 76 % der Commits
2.7/13.5Breite der Beitragenden — 2 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled2
top_contributor_share0,76
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
38.2/38.3PR-Annahme — 2/2 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 1/11 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs2
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
5/25Reichweite des Inhabers — 4 Follower von inixiative
10.9/25Kontohistorie — 15 öffentliche Repos, Kontoalter ca. 1 Jahre
Verwendete Eingangsdaten
followers4
owner_typeOrganization
is_verified
owner_logininixiative
public_repos15
account_age_days398

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 6 Tagen
20/20Versionshistorie — 19 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@inixiative/rules-builder
ecosystemsnpm
any_deprecatednein
min_days_since_publish6

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

76Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — biome.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionnein

Sicherheit

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

40Gefährdet · 16 % des Gesamtindex

Sicherheitslage

40Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/11 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
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 — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, signed_releases. 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.

55Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 100 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — biome.json
11/11Statische Typprüfung — tsconfig.json
0/10Reproduzierbare Umgebung
10/10Belegte Agentenpraxis — 78 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configstsconfig.json
agent_commit_share0,78
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/82 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes33.730
source_files_sampled82
oversized_source_files0
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

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

Warnungen zur Datenerhebung

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 4.0 / 10
4.0Gesamtwert

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-27 04:59 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/11 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
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
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Alle Abhängigkeiten nicht erhoben

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 859,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "TypeScript": 302648
      },
      "pushed_at": "2026-07-20T16:14:18Z",
      "created_at": "2026-02-02T01:37:02Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-20T16:14:52Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "www.inixiative.com",
      "name": "Inixiative",
      "type": "Organization",
      "login": "inixiative",
      "company": null,
      "location": "Uruguay",
      "followers": 4,
      "avatar_url": "https://avatars.githubusercontent.com/u/217591721?v=4",
      "created_at": "2025-06-23T11:50:51Z",
      "is_verified": null,
      "public_repos": 15,
      "account_age_days": 398
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "316d85aa2e8119763bfd8f1ad840be68e286d02f",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-20T16:14:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a95285dbe3523cd39ab411420f9facb98ceabc2d",
          "body": "…ations\n\nAdds an aggregate facet to ArrayNode so the builder can author the AggregateRule\nshape json-rules already supports: mode (sum/avg) + numeric-field picker over the\nrelated model + comparison operator/value, with the element window reusing the\nexisting condition sub-builder. Surface tags fiel\n[…]\nte mirrors the engine's toPrisma guards. min/max left for when the\nengine adds them; element count stays the existing count facet.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(builder): author numeric aggregate rules (sum/avg) over many-rel…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-20T16:05:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "70f763f8473cbe81402aa5b8a7634c733a511334",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-20T14:00:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d7f0f71c13a260b10758c3625f3240a7624deae",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-17T04:31:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21b2388f36a90c3626561e6882ddba8ffe0f36cb",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-17T04:06:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "513cd9160a4d43adca41da97c8be7ba41b6c92f3",
          "body": "…selectors\n\nThe pin infers from conjoined sibling clauses on the field's surface\naxes and narrows enumValues so validity gates on the partition.\nFacet.group removed; collection identity is order-tolerant subset\nmatch, most-specific wins; Facet.selectors declares inner rows so\nrenderers stop hardcoding paths. Requires json-rules ^2.18.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.20.0 — sibling-derived partition pinning, subset matchFacet, facet …",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-17T03:31:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e559179c44df42e4ddc3da31f62b0aff78828ac4",
          "body": "BuilderField.options carries the surface option set verbatim (group\nincluded); Facet.group pins a facet's value picker to one partition.\nIdentity and rehydration stay path + fixed where — group is\npresentation only. Peer dep raised to json-rules ^2.17.1.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.19.0 — grouped sources reach the picker",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-17T02:41:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "98043dc2edda5dd97f88cf22785ec8fee4dd95e4",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-17T01:57:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94acfd17044929e18ad3b96126b4a4393e8451e8",
          "body": "…lockedLeading/label\n\nFacets sort ahead of anchor fields in the builder's field list — the named,\ncurated entries a decoration exists to surface open the picker. Example\nrenderers backfilled to the contract the types spec: hoist collapses to the\nfacet badge, lockedLeading identity rows hide, group label renders as title.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.18.1 — facets lead the picker; drop-in renderers demonstrate hoist/…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-15T00:52:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8e79f142187b9946c65d73782f12d551e9270fd4",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-14T04:47:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c7a478097a6bfe15b3a7060e731034ce1f63f16",
          "body": "…ng-qnvisb\n\nfeat: Decoration/Facet — hoist & relabel lens paths into the root selector (0.18.0)",
          "is_bot": false,
          "headline": "Merge pull request #2 from inixiative/claude/rules-builder-lens-mappi…",
          "author_name": "Aron",
          "author_login": "agreenspan",
          "committed_at": "2026-07-14T04:45:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e75881423163b57f6ecb67dc930104105522aea",
          "body": "The Decoration/Facet primitive shipped in this PR without a changelog entry\nor version bump. Documents the four facet kinds, two-wheres, validateDecoration\nguarantee, and the new exports; bumps 0.17.0 → 0.18.0.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: 0.18.0 — CHANGELOG entry for Decoration/Facet + version bump",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-14T04:42:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "45feb53449968b43fcef34aea25da359d7b1aa6c",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "docs: document splitting one relation into N tagged sources",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T03:42:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "18efe2fbe4e43a82b78aeca21ca1db155454f54c",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "test: same relation adjoined N times, split into tagged sources by slug",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T03:40:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9b0df35391bec6374230c6fe58365e9be5631c5e",
          "body": "Proves you can divide one physical enrichment table into logical sources with no\nnew primitive: each integration is a facet whose fixed `where` leads with the\nsystem slug (`{all:[slug=salesforce, key=nps]}` vs `slug=gong`). The two are\ncollision-free, each seeds `customFields any (slug=… AND key=nps\n[…]\nis fully\nsupported today; only the ergonomic `scope` remains, deferred.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "test: demonstrate the manual source-split by system slug",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T03:36:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07ece7fd263616fdfcaee58becf5d60d07990b64",
          "body": "A single physical EAV/enrichment table is often N logical sources split by a\n`source`/`integrationId` column (integration A vs B custom fields). Captures:\nit's the same where-slice one level up (expressible by hand today: facet\n`where: {all:[source=A, key=nps]}`); the only gap is ergonomics (declare\n[…]\novenance, so the source→fieldset\nmapping must be authored, not derived.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "docs: capture the source-splitting open question",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T03:21:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "369b52620f90b87086f355395c800f8ccdb00a3e",
          "body": "PickOption gains `icon?`, and the field selector's options carry each field's\nicon (leaf/collection/branch/preset facets, and relations retagged via\nlabels.models). Previously the icon only reached the collapsed node (hoist.icon)\nand BuilderField.icon — not the menu you pick from. Now the sectioned picker can\nshow icons on the options too.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: propagate facet icons to picker menu options",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T03:13:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ed5980ce8e64af7f51b6edc5eaec13104ab94887",
          "body": "…tion\n\nA facet can now carry `condition` instead of `path`: an alias for a whole\npre-authored rule (e.g. \"Mature\" = tier=gold AND account.industry=tech).\nSelecting it drops the entire condition in as one atomic node — no field /\noperator / value pickers — and it simply works as a rule. A saved node \n[…]\n, passes the lens gate, evaluates,\n  and rehydrates as the atomic chip.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: preset facets — a named alias for a complete pre-authored condi…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T03:02:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce8241870ecb4f7e9bb54ad38de081febbae8a85",
          "body": "…the gate\n\nDrives each facet kind (leaf, sliced collection, branch) through useRuleBuilder,\nsets a value, emits the Condition, and asserts it both passes\ncheckRuleAgainstLens (the lens gate) and evaluates correctly via check() —\nincluding that the NPS facet's locked `where` actually scopes it (a `csat`\nelement doesn't satisfy it).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "test: end-to-end — a decoration facet compiles to a rule that passes …",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T02:35:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bc2f0b7220e3368e63fed5403380cb8382859de6",
          "body": "Wires the previously-reserved `labels.models` dictionary:\n- the root/anchor group carries a `label` (GroupNode.label) from\n  labels.models[map:Model | Model] — \"overwrite root with a label\";\n- relation fields (list + to-one) are retagged by their target model's label\n  wherever a surface is built (r\n[…]\neling half so\nanything can be retagged too. labels.maps stays reserved.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: retag the root and relations via labels.models",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T02:31:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07df7b979c63e376fbed217979bbd6be00b178f9",
          "body": "…tion\n\n- Correctness: the ROOT group could be captured by a whereless branch facet's\n  prefix heuristic (when every root rule sat under one relation), swapping the\n  root picker to the branch scope. buildGroup now gates branch recognition on\n  path.length > 0 — a branch is always a nested group, nev\n[…]\nit that made operators editable defaults (dropped from match identity).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "fix: address Steven's PR review — root capture, match honesty, valida…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T02:24:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9ce05c7d360e77420fca9a89dfa4ed893c13f433",
          "body": "…rrayOperator\n\nThe traversal layer now carries an operator for EVERY array boundary the path\ncrosses (each defaults to `any`), not just the ones \"before the destination\".\nIts length must equal the path's array-traversal count — validateDecoration\nrejects a mismatch. The separate `arrayOperator` fiel\n[…]\nwhere` only; it descends to the innermost and checks\nthe leading where.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: defaultWhere is one operator per array traversal; drop single a…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T02:09:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8bd5bd05618b6a030d1c301e3a8f601602cb32cd",
          "body": "… at destination\n\ndefaultWhere is now a list of ArrayOperators (default `any`, the contains\nsemantic), one per array boundary the path crosses before its destination —\n\"just enough to cross the boundaries and get to where the path has traveled to.\"\nIt is no longer a Condition.\n\nA collection seed now\n[…]\nd: multi-boundary seeds round-trip and\nevaluate correctly with check().\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: defaultWhere is the upstream array-traversal layer; where lands…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T02:03:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "40b0accaac568525581a657c76b226e13f87e53b",
          "body": "- defaultWhere now seeds only collection (array-traversal) facets — removed from\n  branchSeed. A branch takes only its fixed identity where. Doc updated: leaf and\n  branch facets ignore defaultWhere.\n- Confirmed the decoration traversal carries no non-rule-nesting depth checks:\n  branchFields walks \n[…]\n path segments. The lens's finite\n  narrowed surface bounds everything.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "fix: defaultWhere is array-only; decoration traversal has no depth caps",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T01:49:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "41a8ae568dd4cb655ae194df0c5aa67c7ac040f3",
          "body": "The exposed lens is already a finite, narrowing-bounded surface, so an arbitrary\nBRANCH_DEPTH cap second-guessed it. branchFields now walks the branch model's\nsurface with only the per-chain `seen` guard for termination on recursive\nschemas — the same mechanism exposedSurface uses. The narrowing decides depth.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "refactor: drop the branch-depth cap; trust the lens's fixed depth",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T01:45:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8741e109a222faa78f333b2300169306badbe93f",
          "body": "Nesting is no longer bounded to one level.\n\n- Collection facets recurse: a path crossing several list relations\n  (`orders.items.sku`) seeds nested array nodes — `orders any (items any (sku …))`\n  — instead of a flat two-list path that json-rules silently mis-evaluates\n  (verified with check()). col\n[…]\nat each level as\n  nested array nodes rather than descending them flat.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: full nesting — nested array facets and nested branch pickers",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T01:39:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a1c0e3abf6cc04bf3c477e4492d170fc54149d9e",
          "body": "Completes the leaf/branch/collection trio. A facet path ending at a to-one\nrelation (`account`, `salesforce:Contact`) is a **branch**: selecting it seeds a\ngroup whose field picker is scoped to the related model, and leaves emit real\n`account.*` dotted paths (json-rules resolves them in a flat group\n[…]\nenum fields only — nested branches (a to-one inside a branch) deferred.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: branch facets — hoist a to-one relation as a scoped group",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T01:22:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a0a4c50274df34df818432a03932bca79a3d02d",
          "body": "Rename the primitive per review (not \"lens\" anything): the mapping is a\n`Decoration`, each entry a `Facet`. Plus the model refinements:\n\n- Two distinct `where`s. `where` is FIXED/non-editable — the facet's identity,\n  prepended as the leading condition(s) and the only thing rehydration matches\n  on.\n[…]\nelation as a scoped group) and nested-list paths remain the\nnext slice.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "refactor: LensView → Decoration/Facet; two wheres; collision validator",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T01:14:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "54d0205a1c6ae1304bd1053c63e5fd46710e51d3",
          "body": "Addresses the review directives on top of the hoist templates:\n\n- `slice` → `where`, consistent with the lens/engine vocabulary; authored and\n  non-editable (the array node's locked filter).\n- Multi-hop: a hoist path may traverse any number of to-one relations (and\n  bridges) before its list/leaf — \n[…]\nked/hidden.\nNested-list paths (two array levels) are not collapsed yet.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: where-slice, multi-hop, hidden-editable operator, rehydration",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T00:52:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3c8b75b4e5e3568415403934995473342dd97257",
          "body": "Generalizes a hoisted root from \"a field\" to a rule template, so a view can\nraise more than flat leaves to the root selector:\n\n- Collection hoist: a path whose first segment is a list relation seeds a\n  top-level array node (a scalar operator over a list path silently mis-matches,\n  so it must be a \n[…]\nook\nconcats collection roots and applies the move-not-copy subtraction.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: collection & sliced hoists, move-not-copy, round-trip matcher",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T00:38:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "03b54cc4b0a50feb72f757ac74991d5281e76f29",
          "body": "json-rules silently mis-evaluates a scalar operator over a list-crossing path\n(`orders.total > 100` returns no-match even when an element is 200), and\ncheckRuleAgainstLens does not catch it. walkToOwner now drops any path with an\n`isList` segment so slice-1 never emits a broken flat leaf; array-node hoisting\nis a separate, still-to-design node kind.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "fix: never flat-hoist a path crossing a list relation",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T00:17:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ade724d3fdfae5829e43926f19784c1ffa252a29",
          "body": "Adds a presentation-only display view over a lens. `roots` moves chosen lens\nlocations (any dotted path from the anchor, crossing `map:Model` bridge\nsegments) up to the builder's root field selector, additive to the anchor\nmodel's own fields. Each hoisted entry emits its real path as the rule `field\n[…]\nd rendering map/model/bridge labels mid-drill-down) are the next slice.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013JBMaiAdm6feKJUXx3XwEd",
          "is_bot": false,
          "headline": "feat: LensView — hoist pre-traversed lens paths to the root selector",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T00:13:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "de180ac851f43a3f84a0cab4403ddb5041eb7614",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-09T17:55:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47abd76f389371af3f826fea4f5e8d8bcea61178",
          "body": "…17.0)",
          "is_bot": false,
          "headline": "feat: configurable empty scaffold; setCondition(undefined) clears (0.…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-09T17:54:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b46844aaf8253d048f4a58dd88f39a5c4f396a0",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-07T01:56:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f142fcc30ecfe13e963c629ad43a90e637fbae0d",
          "body": "…+ slight fuzzy (0.16.0)\n\nOptions extend the engine string settings (Partial<EngineGlobalsState['string']>);\nthe filter pass applies them via engineGlobals.with(). Defaults to\ncase-insensitive + slight typo-tolerance ({ maxRatio: 0.2, maxDistance: 1 }),\noverridable per call. Scoped to the sync pass, global config untouched.\nBumps @inixiative/json-rules to ^2.16.0.",
          "is_bot": false,
          "headline": "feat: useFilteredCollection string-match defaults — case-insensitive …",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-07T01:40:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9316d1aa081fd1845aefdc1b89a4c3a15cd68bdd",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-07T01:17:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0aec77366383fab726847ccf09ac1c316756431",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-07T00:37:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e830f002ae26ba002911ce709e4cd3ca28655fa8",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-07T00:02:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03b1b3ea5302e2b2c342e1d3d1bbf9cefbad47d6",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T18:28:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b7b800e3434525f77772f42ef01a2d5e519f590",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T17:44:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62399453b9e443800299a06dbb4dd7c2a09ee188",
          "body": "…ion in hand",
          "is_bot": false,
          "headline": "feat: 0.15.0 — useFilteredCollection, headless builder over a collect…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T17:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9adb1cf74f7c1fbc149c1b3a5ea401395ee89013",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T17:29:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fefb5df6cb8a90af84dd49518f3f26cefc18e436",
          "body": "…tion in hand (0.15.0)\n\nComposes useRuleBuilder with the in-memory half of the rules duality for\ncollections fetched whole (calendar ranges, Kanban boards): one Condition\nowner, one option-folding seam (sourceValuesFromRows through resolve),\nstamp-once. useRuleBuilder.value is now memoized so downst\n[…]\nolve for the shared\npre-projection lens. Peer floor: json-rules ^2.14.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017Zq9H6g79PM1uEyPqHQcLk",
          "is_bot": false,
          "headline": "feat(builder): useFilteredCollection — headless builder over a collec…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-03T16:54:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "94a007899911e0f3922a2db547cdcd9abfb71b2d",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T05:25:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af71ac936a54dbdb40b6ac99295679cb344890fc",
          "body": null,
          "is_bot": false,
          "headline": "chore: sync ecosystem deps to blessed set",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T05:11:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "605fb5053fe325a5a45c6ac5863e6df9c791c76f",
          "body": "…ime coercion)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: release 0.14.1 — json-rules ^2.13.1 floor (deterministic DateT…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T04:35:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0ae51942396a6c06db9011ee2dddb86352bda1db",
          "body": "…-memory check demos\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: evaluate panel + coerceType docs; enrich sample rows for in…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T03:28:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "292aa865cf596866790b012e05d3921c2b9477a0",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: adopt @inixiative/config 0.3.0 (2.13 blessed set)",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T02:45:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6201c5a6354341e1c9e0934922024ed28212a8cd",
          "body": "… url\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: commit train re-lock (json-rules 2.13.0); normalize repository…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T02:39:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2cde0304130a9fe2122be9d5217fe24a1cfbe5a3",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: align json-rules devDep floor with peer (^2.13.0)",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T02:36:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e9ec4b36f0b5fc391e95784240b3761c8e1fd08b",
          "body": "…oercions (0.14.0)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(builder): emit coercion-stamped rules via json-rules 2.13 stampC…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T02:31:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e140d86316b5206c1c424e2b8295daf397dac83f",
          "body": "…l failure at publish)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: build via @inixiative/config tsup preset (fixes TS6 dts baseUr…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T02:25:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a61cecba8e375b77ff8cab91a60026a21ded91ac",
          "body": "…ok, committed lockfile, CI)\n\n- biome 2.5.2 via config stubs; first-ever format pass (61 files); src at\n  full enforcement, examples override off noLabelWithoutControl +\n  noArrayIndexKey (demo playground); tailwind css excluded from parsing\n- tsconfig slimmed to react preset stub; examples get vite\n[…]\npublishOnly deduped\n- bun.lockb -> bun.lock (committed), lefthook pre-commit, ci.yml caller\n  reusing inixiative/config lib-ci.yml\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: adopt @inixiative/config 0.2.1 (biome + tsconfig stubs, leftho…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-03T01:50:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e5139bae80beeeead8424f0ffd055d483183f128",
          "body": "…array-root remove; test hooks (0.13.0)\n\n- adopt json-rules 2.12.1 options: runSources → SourceValues.options {value,label}[], describeModelFields reads field.options; example narrowing editor handles Condition | SourceSpec\n\n- fix: bare array-root remove() no longer throws (clears to empty group); junk 'undefined' node id guarded\n\n- tests: lifecycle coverage for all five hooks (+42, 176 total)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: bind value-source + adopt json-rules 2.12 labeled options; fix …",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-07-02T16:07:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7b58446107822ae2cbe91d539b5a9310d7457a9b",
          "body": "…le-9p39jf",
          "is_bot": false,
          "headline": "Merge pull request #1 from inixiative/claude/bind-rules-builder-examp…",
          "author_name": "Aron",
          "author_login": "agreenspan",
          "committed_at": "2026-06-30T23:05:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7734b1dd500a70ced4731654cbbdcab7162ba14e",
          "body": "…ion builders) (0.12.0)\n\nThe two uncontrolled leaf builders (useRuleBuilder, useActionRuleBuilder) read\ntheir seed once at mount via lazy useState, but named the prop `value` — the\ncontrolled name. That invited consumers to round-trip it (value={state}) expecting\ncontrolled semantics it silently ign\n[…]\n (usePermissionBuilder/useTransitionBuilder),\n`defaultValue` = uncontrolled seed. Reseed via remount key or the imperative setter.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: rename uncontrolled seed prop value -> defaultValue (rule + act…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-30T22:05:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9454435cb4054a2cfe880d5a632461cf08cd9991",
          "body": "Pin to the bind key-presence contract fix (2.11.1).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TNattabTfrjmM1i127vUPs",
          "is_bot": false,
          "headline": "chore: require json-rules ^2.11.1",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T16:56:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "61a9f8ba869ce221cf1cee5630e4ed5ab9251670",
          "body": "…12.0)\n\nAdd `{ bind }` as a third leaf value-source alongside literal `value` and\nfield `path`. A bind references a named binding resolved at execution time\n(json-rules 2.11). `ValueControl` gains `mode: 'bind'` and a `bind` control\nmirroring `path`; both reference renderers (plain + shadcn) render \n[…]\nules to ^2.11.0 (where `bind` lands in the\nCondition type and runtime).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TNattabTfrjmM1i127vUPs",
          "is_bot": false,
          "headline": "feat: bind value-source in the rule builder + reference renderers (0.…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T14:47:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8e5ef13340f6e0e3d1810cbad9952c1fe9ae1f8b",
          "body": "…11.0)\n\nBooleans are first-class everywhere a condition or ActionRule leaf can go:\n\n- Condition builder: a leaf is a field comparison OR a `true`/`false` literal\n  (`leafKind` + `setLeafKind` flip between them; `literal` holds the value).\n  buildNode routes a raw boolean to a literal leaf instead of\n[…]\n(RuleTree, RuleTreeShadcn, ActionRuleTree) updated for the\nleaf-kind toggle, the literal value control, and the allow/deny badges.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: raw booleans as a leaf; bare root (no synthetic group wrap) (0.…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T13:30:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7a65a81a25056603ec68ff0525dba2a62d68a3f2",
          "body": "…ges\"; demo the rel-walk + transition authz\n\n- buildActionRoot: editing a rel hop now resets `action` — changing the\n  relation path can move the target resource, so a previously-picked action\n  (belonging to the old target) would ship stale and incoherent. Only\n  picking the action keeps the path. \n[…]\n a `from.permission` that delegates to app:Order's\n  `manage` — demonstrating transition authz is aware of the permissions object.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(transitions/permissions): reset stale rel action; \"paths\" not \"ed…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T10:58:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "89566aaff66db1634eab0d364b3ba6ca1f0b08e2",
          "body": "Adds the headless transition-schema builder (src/transitions/) and a\nTransitions tab to the example: resource (`map:model`) → action → edges,\neach edge a from/to side with a predicate (rule builder) + optional\npermission (ActionRule builder), `to` carrying a serializable merge.\n\nNav: drop the nested\n[…]\nowings, actions\nunder permissions) — the tree grew unwieldy. Sidebar items are now flat;\nnarrowings render `name ← parent` inline.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: useTransitionBuilder + Transitions tab; flatten nav (0.10.0)",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T10:44:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "391cc7e403e7d65d1eb0d39ed9d59f80c146ed28",
          "body": "A rule's value control now toggles literal `value` ↔ `path` — comparing a field to\nANOTHER field's value by dotted path (`{ field, operator, path: 'user.email' }`), which\nContact's rebac uses. ValueControl gains mode/setMode + a path sub-control; switching modes\ndrops the other key. Both reference renderers render the `= value` / `→ field` toggle and a\npath input. Benefits Rules and the embedded permission abac leaf alike.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: abac value-by-reference (path) control in the rule builder (0.9.1)",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T05:13:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5cf0fa6d6f5097bbcf657e8462f0df0794c00092",
          "body": "… (0.9.0)\n\nActionRule `rel` is now a multi-hop path: one segment per relation crossed, each scoped to\nthe resource reached so far (RelControl.segments + addSegment/removeLast + target). Only\nto-one relations are walkable — list relations and the one→many bridge direction are\nexcluded (the check eval\n[…]\n checked bridges become the schema's `bridges`.\n- ActionRuleTree renders the rel path (segment selects + hop add/remove + action).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: multi-hop rel paths, to-one gating, permissions scope selectors…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T05:04:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fb7db14cc89a893adb9c92dd14d025f2d6ad5abf",
          "body": "…e (0.8.0)\n\nBREAKING: rules-builder's re-declared permission API now matches the engine's 0.2.0\nself-contained schema so the builder emits what the checker consumes.\n\n- RebacSchema = { bridges?, permissions } (was flat Record<model, ModelPermission>).\n- ResourcePermission (was ModelPermission); reso\n[…]\n Permissions tab is resource-keyed; emitted JSON is { bridges, permissions };\n  sample + workspace carry `app:User`. Docs updated.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat!: sync permissions builder to @inixiative/permissions 0.2.0 shap…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T04:50:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2bbb4ded2ddeb7cb3e14be23fcddda278ed5e7ce",
          "body": "…ma (0.7.0)\n\nThe permission artifact is the entire schema (model → { actions }), not a per-model\nentry with an entrypoint. usePermissionBuilder now takes the whole schema (value/onChange)\n+ the fieldMaps, manages every model (addModel/removeModel/...), and builds each model's\nRAW record surface from\n[…]\n).\nThe Permissions tab is now a whole-schema view: models list + per-model actions + the\nActionRule editor + the full schema JSON.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(permissions): usePermissionBuilder owns the whole rebac sche…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T03:41:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d0bde4e69258b0e65531bb9c92d978930fb345e1",
          "body": "…the raw model\n\n- buildActionRoot crashed on a null node (deny): it fell through to the `rule`\n  branch and read `null.rule`. Add the explicit deny branch (kind-only node).\n- Permissions are now authored against the RAW model record (full surface, relations\n  via bridges), not a lens/narrowing — aut\n[…]\n needs every field,\n  not a projection. SavedPermission.source → { mapName, model }; the Permissions tab\n  picks a model directly.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(permissions): handle the deny (null) ActionRule + author against …",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T03:32:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ac267caf161c3f16c375a1157a387c93df09f678",
          "body": "…er (0.6.0)\n\nPermission primitives over a lens/narrowing base (src/permissions):\n- ActionRule algebra (delegate / rel / self / { rule } abac / any / all / deny),\n  declared zero-dep over json-rules; tree ops + buildActionRoot descriptor.\n- useActionRuleBuilder: the atom — one model-aware ActionRule.\n[…]\nOOLS, with Docs + Settings bottom-aligned; Docs gains a Permissions section; sample\nrebac entry on User. 21 new tests (112 total).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(permissions): headless useActionRuleBuilder + usePermissionBuild…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T03:25:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "df91cadb67646c9cf06038728969b1e7faf460e3",
          "body": "…form)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(examples): trim Related links to GitHub (drop npm + conditional-…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T02:55:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b9a93f87e81c4a9c60aa59a38b29d1e59ff281db",
          "body": "Link the builder (GitHub + npm), the json-rules engine, conditional-form, and the\nplatform site — not just json-rules.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(examples): expand the Docs \"Related\" links to the full ecosystem",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T02:47:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d9a7d138f7da6efd3ab4c34cf0f000274fdf9dc2",
          "body": "FieldMaps had a two-mode header (New fieldMap/Add vs Edit fieldMap/Save+Close)\nwhile Lens/Narrowing use a single name-driven form. Make it consistent: one\n\"FieldMap\" header (name + Save, no Close), Save creates or updates/renames by\nname, with a live MapView preview of the JSON draft.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(examples): unify the FieldMaps editor with the other forms",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T02:46:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "284d269f0d0266ec0b1eb1e08efbd174d16ac2f3",
          "body": "…Node from entry\n\n- NarrowingEditor crashed (`Button is not defined`) — the import was dropped when\n  the editor moved to the shared EditorHeader, but Button is still used in the\n  mapDefaults section.\n- Re-export the `ArrayNode` type from the package entry (it was only reachable via\n  the internal \n[…]\n  slipped through. Add tsconfig.examples.json + a typecheck:examples script and gate\n  example:build (and the Pages deploy) on it.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(examples): restore Button import in NarrowingEditor; export Array…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T02:40:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0eb9498017045f04bc450b3cdb34b00f623da4d3",
          "body": "…validity (0.5.0)\n\nLibrary (@inixiative/rules-builder):\n- Array/relation rules: a new ArrayNode in the descriptor tree — presence\n  (empty/notEmpty), count (atLeast/atMost/exactly + count), and predicate\n  (all/any/none) with a nested `condition` + window `filter` sub-builder scoped\n  to the related\n[…]\n\n  to every rule field; fix the lenses/narrowings counts.\n- Ref-based saved rules in the workspace (source ref + captured values).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: array rules, sourced-values helper, serialization, per-control …",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T02:33:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "14ffb7263ef1088a18386c6d736549fc1c583384",
          "body": "The nav is a CSS grid; its grid-item children (section and item\nwrappers) defaulted to min-width:auto, so the widest label's intrinsic\nwidth forced the tracks past the 196px content box — pushing the ✕\nremove buttons ~5px past the panel border and jamming long labels\n(`admins-only ← vip-active`) to \n[…]\nink:0 on the ✕ so it keeps a fixed slot, overflow:\nhidden on the nav as a backstop, and widen the rail 220→240 for\nbreathing room.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(examples): stop inventory nav from overflowing its panel",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T00:40:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1d19515df248520cd7f5d3b5f26a2462711c2711",
          "body": "…ions) as separate top-level concepts\n\nNarrowings pick a parent (lens or narrowing) and restrict its EXPOSED surface — controls + options reduce down the chain; resolveRef walks the chain; inventory gains a Narrowings section (each shows its parent, sources nested under it); builder + value picker author against any lens or narrowing; sample = 1 lens + 2 chained narrowings.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: split Lens (anchor+bridges) vs Narrowing (parent + restrict…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T00:31:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7c2b2d5238dc875db13266744edc26ac128db441",
          "body": "…; item click loads it\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: Lenses header click starts a fresh lens (matches FieldMaps)…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T00:13:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b717e0a2df0bb9fa0d5c160843da80173213fc27",
          "body": "…ng; edit view has a name field (rename), no Add (Add lives in the list view)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: FieldMaps editor — clicking the section header clears editi…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T00:12:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "addd98863fd640fd2f0631db9d2c2042b68628a5",
          "body": "… + nesting bg, so a group reads as a conditions block and nesting is legible\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: rule-group clarity — CONDITIONS label + colored left-accent…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T00:10:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "33b38539f7e62a4911be76b95ca51994c3fab008",
          "body": "…t); boolean value → true/false dropdown (not checkbox); label narrowing JSON as the reference form (vs projected surface)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: editable FieldMaps (per-map JSON editor + add, click-to-edi…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-29T00:08:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eff79d20e7928f7d93ae5b26767ae33e51369814",
          "body": "…sted under it in the inventory; drop standalone Sources tab/flat list; sourceValues via runSources(lens)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: sources live in the lens narrowing — edited in the lens, ne…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:56:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a1dfdd3dd5643a4cd220515722e3b0bce3784750",
          "body": "…omposed against a lens)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: revert order — Lenses before Sources (a source's where is c…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:40:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5180fe76f15268e1ffb33a4e461e7ccba851f913",
          "body": "…emove (✕); sample cross-map lens in default; Sources before Lenses\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: rules as a saved collection (+ Save rule); inventory item r…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:37:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd92462b6263c7d3b93090e11496d396818c5b1b",
          "body": "…lation affordance, value picker lens→fieldMap→model, Select sweep\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: per-lens bridges (attach + stitched relations), 'extend' re…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:33:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "97ae20e64477b07754b81c2c714de1e3ed03c080",
          "body": "…N import); header is title-only; FieldMaps tab view-only\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: Settings entry in nav (export/import/clean/load + typed JSO…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:26:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "80d3cab25d834ad6415f073b357eb9b981dfd32f",
          "body": "…shared Select primitive; lens loads from sidebar\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: inventory sidebar (replaces tab flow) + Clean/Load-sample; …",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:21:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d0f3ace508abcb484d76eac3937ae37a16cfb20e",
          "body": "…oing the same none/picks/omits as enum values)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: standardize field-visibility on the dropdown (was a radio d…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:09:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1bf009d5a61ea5369497b38a94cdb5e1f629e51d",
          "body": "…aps (flow) casing\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: load the sample bridge by default; FieldMaps (tab) / fieldM…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:07:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c62790678585eb53e2960a3a8bc21ec0c22d10c",
          "body": "…nk live demo\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: host the example on GitHub Pages (vite base + Actions deploy); li…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T23:01:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "35348a34c80d49a5d12296b61ac85e040cad93c0",
          "body": "… demo; 0.4.0\n\ndescribeModelFields + lensValuePicker flag Json columns (acceptsSubPath); the rule builder's field control resolves a base Json column + freeform subPath and recomposes the rule's field; RuleTree/RuleTreeShadcn render a json.path input; new '6 · Value Picker' tab demos lensValuePicker freeform descent; sample User gains a Json metadata field.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: freeform Json sub-path entry across both pickers + value-picker…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T22:47:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "94988a0b8faf1cb5f24f056e9c0129efde05b410",
          "body": "…sub-path entry\n\nA Json column has no declared sub-fields, but the json-rules kernel resolves a dotted JSON path on the operand across all three targets (check via lodash get, toPrisma via walkFieldPath → { path: [...] }, toSql via quoteField → ->>). The picker now signals this with LensValueOption.acceptsSubPath so a renderer can let the user append a freeform sub-path (metadata → metadata.theme).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(lensValuePicker): flag Json columns acceptsSubPath for freeform …",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T22:28:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e6f5350d8dd85ea26dd8fb1d56cad1c9fc9cd9db",
          "body": "…ker + shadcn drop-in (0.2.0–0.3.0)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: pure-headless descriptor builder + resolve() + lensValuePic…",
          "author_name": "Aron Greenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-28T13:20:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "992db9c3f6f20a0717f5e8731857bdde23a7f191",
          "body": "https://claude.ai/code/session_01N5FYPb4FZ81f1rZrkjaeQZ",
          "is_bot": false,
          "headline": "chore: add check script and run check+test on prepublish",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-13T18:13:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bde73cdc1fdb5c9116c2167b4aad3c62219ee86e",
          "body": "- examples/slots.tsx: a concrete ComponentSlots implementation (dependency-light;\n  swapping in shadcn is a styling change), factored out from the app.\n- examples/App.tsx: wires RuleBuilder + the slots over a sample User lens and shows\n  the live clean condition; main.tsx/index.html/vite.config.ts.\n- `bun run example` (dev) / `example:build`. Verified: `vite build` bundles the\n  full stack (35 modules) and 42 tests stay green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Example app: minimal Vite app + factored-out slot set",
          "author_name": "agreenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-13T15:54:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1bc55202807cae2bfe3ffb08b727479423898957",
          "body": "- useRuleBuilder: holds decorated tree state, emits CLEAN conditions at the editor\n  boundary (withIds in / stripMeta+trimEmptyGroups out); exposes path-addressed\n  mutations + fields()/describe()/validate() over the composed surface.\n- Components (slot-injected, BYO via ComponentSlots): RuleBuilder\n[…]\n(happy-dom + @testing-library/react, React 19); 42 tests incl.\n  render/add-rule-emits-clean/remove/enum-value-select. Full src typecheck clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "React layer: useRuleBuilder hook + recursive RuleBuilder components",
          "author_name": "agreenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-13T15:50:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bfafff747e37071d3058e55a552ed4dfe198a348",
          "body": "Convention: editor meta keys are _-prefixed, so one deep stripper cleans any\nartifact (conditions, maps, lenses, bridges) at the editor→DB boundary. Decoration\nstays artifact-specific — only the Condition tree's positional arrays need synthetic\nids (withIds); maps/bridges/lenses key on names/registry ids naturally.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Make stripMeta artifact-agnostic (strip any _-prefixed key on any tree)",
          "author_name": "agreenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-13T15:36:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "32f3c353a1d987c75bbfbd89c5d724adbf94f23d",
          "body": "Locks the semantic: unwrap removes the group wrapper (promotes children); an\nempty group dissolves to nothing. Deleting contents too is removeNode, not unwrap.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: unwrapping an empty group deletes the wrapper entirely",
          "author_name": "agreenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-13T15:33:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6a3baf3c491bb8c5ecf28c548f1b476780e73b64",
          "body": "…a layer)\n\n- groupSiblings(parentPath, indices, kind): wrap arbitrary selected siblings of a\n  compound into a new subgroup at the earliest position — pushes a subset down a layer.\n- unwrapCompound now dissolves: splices a compound's children into an all/any parent\n  (any child count) to move them up a layer; single-slot parents/root still require\n  a single child. Inverse of wrap/group.\n\n35 tests, typechecked.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Tree engine: group N siblings (down a layer) + dissolve compound (up …",
          "author_name": "agreenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-13T15:31:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f9dfc30e4091de23e838a2cb42692228cba716d8",
          "body": "…t tests\n\n- Strip explanatory comments across src (lean on names/docs/tests per house style).\n- toFieldKind: unknown (non-Prisma) scalar types fall back to String so the\n  generic builder stays usable without a per-source importer (none exists yet).\n- describeModelFields surfaces enumValues for any \n[…]\nown-type\n  fallback, valueShapeForOperator slot mapping, and the editor boundary\n  (stripMeta(withIds(clean)) === clean). 31 tests, typechecked.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Lean comments; generic-map type fallback; pseudo-enum values; contrac…",
          "author_name": "agreenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-13T15:20:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "80b2b2aee08547c7c2e460672ab15e5d8e0982fa",
          "body": "…ties\n\n- composeSurface(RuleBuilderSource): build the leak-safe exposed surface from\n  prisma-map-shaped maps + bridges + entrypoint (+ optional narrowing) — callers\n  pass plain JSON, never a live Lens. The builder composes/reduces internally.\n- core/decorate.ts: UI-decoration layer over the pure C\n[…]\nts a pure Condition engine.\n- json-rules 2.8.0 installed from the registry (dev symlink retired).\n\nTypechecked (core+schema) + 27 tests passing.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Accept serializable maps for composing lenses + tree-decoration utili…",
          "author_name": "agreenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-13T15:08:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "983cd3be8276b638174bdcb022a9a5e170b008d0",
          "body": "Replaces the pre-lens v0 skeleton (hand-rolled field types + operator registry)\nwith a lens-driven core that consumes json-rules ≥ 2.8:\n\n- schema/surface.ts: describeModelFields() adapts an exposedSurface Lens into\n  BuilderField metadata — per-field kind, valid operators intersected across the\n  co\n[…]\nassing. React\nlayer (useRuleBuilder hook, renderer, example shadcn slots, preview) is staged in\nPLAN.md — needs react installed + a DOM harness.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rebuild rules-builder headless core on the json-rules lens surface",
          "author_name": "agreenspan",
          "author_login": "agreenspan",
          "committed_at": "2026-06-13T14:24:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 0,
      "commits_last_year": 100,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 6,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@inixiative/rules-builder",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "json-rules",
            "rule-builder",
            "visual-editor",
            "react",
            "form-builder"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@inixiative/rules-builder",
          "is_deprecated": false,
          "latest_version": "0.21.0",
          "repository_url": "https://github.com/inixiative/rules-builder",
          "versions_count": 19,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 15338,
          "first_published_at": "2026-06-28T02:03:35.080000Z",
          "latest_published_at": "2026-07-20T16:07:36.444000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 33730,
      "source_files_sampled": 82,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 2,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "agreenspan",
          "commits": 76,
          "avatar_url": "https://avatars.githubusercontent.com/u/1390546?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 24,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.76
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "pages.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "biome.json"
      ],
      "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": 10,
            "reason": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 1/11 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 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": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "316d85aa2e8119763bfd8f1ad840be68e286d02f",
        "ran_at": "2026-07-27T04:59:15Z",
        "aggregate_score": 4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T16:14:38Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-14T04:45:53Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/inixiative/rules-builder",
    "host": "github.com",
    "name": "rules-builder",
    "owner": "inixiative"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 50,
      "inputs": {
        "security": 40,
        "vitality": 41,
        "community": 35,
        "governance": 56,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 41,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "commits_last_year": 100,
              "human_commit_share": 1,
              "days_since_last_push": 6,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "100 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "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": "critical",
            "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": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 35,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "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": 70,
            "inputs": {
              "packages": [
                "@inixiative/rules-builder"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 15338
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "15,338 downloads/month across npm",
                "points": 55.8,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 15338,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.76
            },
            "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 76% of commits",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 76
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2/2 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 2
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/11 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 46,
            "inputs": {
              "followers": 4,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "inixiative",
              "public_repos": 15,
              "account_age_days": 398
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "4 followers of inixiative",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 4,
                      "login": "inixiative"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "15 public repos, account ~1 yr old",
                "points": 10.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 15
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 1
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@inixiative/rules-builder"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "19 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "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": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 40,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 40,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4
            },
            "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": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/11 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "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": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 55,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.78,
              "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": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "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": "78 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 78,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 33730,
              "source_files_sampled": 82,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/82 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 82,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T04:59:28.803375Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/i/inixiative/rules-builder.svg",
  "full_name": "inixiative/rules-builder",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.