Öffentliches Register
Software-GesundheitsberichtSchema 0.30.0 · Metriken 2.5.0 · 2026-08-04 07:49 UTC

stefvw93 / weft

Weft is a reactive DOM library where every node is an Effect.

TypeScriptMIT★ 38 Sterne⑂ 1 Forkseit Okt. 2025Auf GitHub ansehen ↗

stefvw93/weft erreicht einen Gesundheitsindex von 65 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (87/100) ab, am schwächsten bei Security (40/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

65
gesamt / 100
Gut

Software-Gesundheitsindex

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

65
Außergewöhnlich93-100Die Spitzengruppe des Registers (≈ obere 5 %); erfüllt im Wesentlichen alle geprüften Kriterien
Exzellent80-92Durchgehend stark; geringfügige Lücken
Gut65-79Gesund; Lücken sind begrenzt und beherrschbar
Mittel50-64Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Schwach35-49Wesentliche Schwächen in mehreren Bereichen
Gefährdet20-34Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-19Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

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

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

Eigentümerschaft

Stef van WijchenPersönliches Konto
14 Follower23 öffentliche Reposseit Juli 2015OWOW

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npmwebsiteverweist auf ein anderes Repo — nicht bewertet0.1.11.6772vor 4829 Tagenscrapingweb
npm@weftui/dom0.31.02.08822vor 10 Tagendomeffecthydrationrendererssrweft
npm@weftui/core0.31.02.25622vor 10 Tagencombinatorsdomeffectreactivessruiweft
npm@weftui/router0.31.01.89521vor 10 Tageneffectnested-routesrouterroutingssrweft

Metriken nach Kategorie

Vitalität

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

87Exzellent · 21 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
13.8/36Commit-Rhythmus — 20/52 Wochen mit Commits
18/18Commit-Volumen — 593 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 12 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year593
human_commit_share0,87
days_since_last_push0
active_weeks_last_year20

Release-Disziplin

100Außergewöhnlich
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 45 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 10 Tagen
27/27Release-Rhythmus — ein Release etwa alle 2,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count45
latest_release_tagv0.31.0
releases_from_tagsnein
days_since_latest_release10
mean_days_between_releases2,2
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?

46Schwach · 17 % des Gesamtindex
Wie die Bewertung erfolgt
25.4/60Stars — 38 Stars
0/25Forks — 1 Forks
0/15Watcher — 2 Watcher
Verwendete Eingangsdaten
forks1
stars38
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
readme_badges1
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
readme_badge_servicesgithub.com
has_pull_request_templateja
Wie die Bewertung erfolgt
50.6/80Downloads pro Monat — 6.239 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@weftui/dom, @weftui/core, @weftui/router
dependents
ecosystemsnpm
total_downloads
monthly_downloads6.239
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?

45Schwach · 23 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
8.4/42Issue-Lösungsquote — 20 % der Issues geschlossen
19.6/30PR-Annahme — 107/164 entschiedene PRs gemergt
0/13Newcomer PR acceptance — kein PR eines Erstbeitragenden in 30 Tagen entschieden
0/15OpenSSF Scorecard: Code-Review — Found 0/16 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs107
open_issues12
closed_issues3
prs_merged_7d0
prs_decided_7d0
prs_merged_30d14
prs_decided_30d14
issue_closed_ratio0,2
closed_unmerged_prs57
first_time_authors_30d0
first_time_prs_merged_30d0
first_time_prs_decided_30d0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): newcomer_pr_acceptance. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
8.5/25Reichweite des Inhabers — 14 Follower von stefvw93
22.1/25Kontohistorie — 23 öffentliche Repos, Kontoalter ca. 11 Jahre
Verwendete Eingangsdaten
followers14
owner_typeUser
is_verified
owner_loginstefvw93
public_repos23
account_age_days4.025
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Außergewöhnlich
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 3 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 10 Tagen
20/20Versionshistorie — 22 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@weftui/dom, @weftui/core, @weftui/router
ecosystemsnpm
any_deprecatednein
min_days_since_publish10

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

75Gut · 19 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 24 out of 24 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein

Dokumentation

85Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 3 Topics
10/10Wiki
Verwendete Eingangsdaten
topicseffect-ts-community-nl, effect, typescript
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

40Schwach · 16 % des Gesamtindex
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 — 24 out of 24 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 0/16 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
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 12 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
0/7.5Vulnerabilities — 16 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
17.9/35Direkte Abhängigkeiten ohne bekannte Advisories — 1 betroffen: request 2.20.0 (moderate 6.1)
2.4/25Indirekte Abhängigkeiten ohne bekannte Advisories — 8 betroffen: underscore 1.4.4 (critical 9.8), form-data 0.0.10 (high 7.5), hawk 0.10.2 (high 7.5), +5 weitere
15.2/40Keine offenen Advisories — 9 Paket(e) mit Advisory seit über 90 Tagen unbehandelt; ältestes vor 3.205 Tagen veröffentlicht
Verwendete Eingangsdaten
sourceosv
advisories18
affected_packages9
assessed_packages40
unassessed_packages0
affected_by_severitycritical 1, high 6, moderate 2
direct_affected_packages1
Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:website@0.1.1 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 40 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Trägt ein bewusst kleines Gewicht (4 %): Agenten-Tooling ist ein echtes Pflegesignal, doch ein Repository ohne jedes Signal kann weiterhin 100/100 erreichen.

71Gut · 4 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 87 von 87 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes16.995
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — examples/async-data-loading/tsconfig.json, examples/declarative-event-handlers/tsconfig.json, examples/effect-atom/tsconfig.json, examples/element-ref/tsconfig.json, examples/error-boundary/tsconfig.json, examples/form-handling/tsconfig.json, examples/headless-menu/tsconfig.json, examples/keyed-list/tsconfig.json, examples/list-rendering/tsconfig.json, examples/reactive-styles/tsconfig.json, examples/router-client/tsconfig.json, examples/router-ssr/tsconfig.json, examples/server-boundary/tsconfig.json, examples/shared-state-islands/tsconfig.json, examples/ssr-hydration/tsconfig.json, examples/subscription-ref/tsconfig.json, examples/suspense/tsconfig.json, examples/type-augmentation/tsconfig.json, packages/core/tsconfig.json, packages/dom/tsconfig.json, packages/router/tsconfig.json, packages/vite/tsconfig.json, website/tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 70 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 13 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespnpm-lock.yaml
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configsexamples/async-data-loading/tsconfig.json, examples/declarative-event-handlers/tsconfig.json, examples/effect-atom/tsconfig.json, examples/element-ref/tsconfig.json, examples/error-boundary/tsconfig.json, examples/form-handling/tsconfig.json, examples/headless-menu/tsconfig.json, examples/keyed-list/tsconfig.json, examples/list-rendering/tsconfig.json, examples/reactive-styles/tsconfig.json, examples/router-client/tsconfig.json, examples/router-ssr/tsconfig.json, examples/server-boundary/tsconfig.json, examples/shared-state-islands/tsconfig.json, examples/ssr-hydration/tsconfig.json, examples/subscription-ref/tsconfig.json, examples/suspense/tsconfig.json, examples/type-augmentation/tsconfig.json, packages/core/tsconfig.json, packages/dom/tsconfig.json, packages/router/tsconfig.json, packages/vite/tsconfig.json, website/tsconfig.json
agent_commit_share0,7
toolchain_manifests
dependency_bot_commit_share0,13
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.4/55Handhabbare Dateigrößen — 3/266 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes314.907
source_files_sampled266
oversized_source_files3
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — demos, examples
Verwendete Eingangsdaten
example_dirsdemos, examples
has_mcp_signalnein
api_schema_files

Eckdaten

38GitHub-Sterne
1Mitwirkende
593Commits, letzte 12 Monate
0Tage seit letztem Push
45Releases
1Bus-Faktor
12offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • npm package 'website' points at a different repository (https://github.com/akoenig/node-website); excluded from ecosystem scoring
  • Could not fetch npm package '@weftui/vite' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 4.1 / 10
4.1Gesamtwert

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests24 out of 24 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 0/16 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 12 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
0Vulnerabilities16 existing vulnerabilities detected
Direkte Abhängigkeiten 7
RegistryPaketVersionsvorgabeManifest
npm@weftui/coreworkspace:*website/package.json
npm@weftui/domworkspace:*website/package.json
npm@weftui/routerworkspace:*website/package.json
npmeffectcatalog:website/package.json
npm@weftui/coreworkspace:*packages/dom/package.json
npm@weftui/coreworkspace:*packages/router/package.json
npm@weftui/domworkspace:*packages/router/package.json
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

Abhängigkeits-Advisories 9

Die Installation von npm:website@0.1.1 zieht 40 Pakete nach sich, direkt und transitiv: 9 tragen bekannte Advisories, davon 1 direkte Abhängigkeiten.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
underscore1.4.4indirektkritisch21.13.8
form-data0.0.10indirekthoch24.0.6
hawk0.10.2indirekthoch29.0.1
hoek0.7.6indirekthoch29.0.3
http-signature0.9.11indirekthoch10.10.0
mime1.2.11indirekthoch12.0.3
qs0.5.6indirekthoch56.14.1
request2.20.0direktmittel23.0.0
tunnel-agent0.3.0indirektmittel10.6.0

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "effect-ts-community-nl",
        "effect",
        "typescript"
      ],
      "is_fork": false,
      "size_kb": 6643,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 4058,
        "JavaScript": 11428,
        "TypeScript": 1584495
      },
      "pushed_at": "2026-08-03T09:11:20Z",
      "created_at": "2025-10-08T16:35:29Z",
      "owner_type": "User",
      "updated_at": "2026-07-26T09:01:25Z",
      "description": "Weft is a reactive DOM library where every node is an Effect.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "stefvanwijchen.com",
      "name": "Stef van Wijchen",
      "type": "User",
      "login": "stefvw93",
      "company": "OWOW",
      "location": "Oisterwijk",
      "followers": 14,
      "avatar_url": "https://avatars.githubusercontent.com/u/13518365?v=4",
      "created_at": "2015-07-27T08:39:02Z",
      "is_verified": null,
      "public_repos": 23,
      "account_age_days": 4025
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.31.0",
          "kind": "minor",
          "published_at": "2026-07-24T14:42:23Z"
        },
        {
          "tag": "v0.30.0",
          "kind": "minor",
          "published_at": "2026-07-22T19:13:10Z"
        },
        {
          "tag": "v0.29.0",
          "kind": "minor",
          "published_at": "2026-07-20T12:41:38Z"
        },
        {
          "tag": "v0.28.0",
          "kind": "minor",
          "published_at": "2026-07-19T12:27:07Z"
        },
        {
          "tag": "v0.27.1",
          "kind": "patch",
          "published_at": "2026-07-17T11:59:18Z"
        },
        {
          "tag": "v0.27.0",
          "kind": "minor",
          "published_at": "2026-07-17T10:05:41Z"
        },
        {
          "tag": "v0.26.3",
          "kind": "patch",
          "published_at": "2026-07-04T20:31:34Z"
        },
        {
          "tag": "v0.26.2",
          "kind": "patch",
          "published_at": "2026-07-04T19:54:42Z"
        },
        {
          "tag": "v0.26.1",
          "kind": "patch",
          "published_at": "2026-07-04T18:22:45Z"
        },
        {
          "tag": "v0.26.0",
          "kind": "minor",
          "published_at": "2026-07-04T18:19:23Z"
        },
        {
          "tag": "v0.25.0",
          "kind": "minor",
          "published_at": "2026-07-03T19:36:38Z"
        },
        {
          "tag": "v0.24.0",
          "kind": "minor",
          "published_at": "2026-07-03T11:51:16Z"
        },
        {
          "tag": "v0.23.3",
          "kind": "patch",
          "published_at": "2026-07-03T11:09:17Z"
        },
        {
          "tag": "v0.23.2",
          "kind": "patch",
          "published_at": "2026-07-03T10:50:27Z"
        },
        {
          "tag": "v0.23.1",
          "kind": "patch",
          "published_at": "2026-07-02T20:06:20Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2026-07-02T20:00:21Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2026-07-02T17:53:35Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2026-06-12T07:50:08Z"
        },
        {
          "tag": "v0.20.9",
          "kind": "patch",
          "published_at": "2026-06-09T20:03:00Z"
        },
        {
          "tag": "v0.20.8",
          "kind": "patch",
          "published_at": "2026-06-08T13:10:07Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2026-06-08T07:48:24Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-06-05T18:18:26Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2026-06-04T15:32:59Z"
        },
        {
          "tag": "v0.16.2",
          "kind": "patch",
          "published_at": "2026-06-01T18:52:32Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2026-06-01T18:22:05Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-06-01T17:38:08Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2026-05-31T13:15:58Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2026-05-31T11:01:11Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2026-05-30T17:16:13Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-05-29T14:35:52Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-05-29T12:11:29Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-05-28T18:44:10Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-05-28T07:53:46Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2026-05-24T19:44:13Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-05-24T19:07:09Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-05-24T07:18:17Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-05-22T12:48:25Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-05-22T08:08:48Z"
        },
        {
          "tag": "v0.5.2",
          "kind": "patch",
          "published_at": "2026-02-28T11:47:07Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-02-28T11:17:08Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-01-22T20:55:43Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-01-22T13:21:02Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-01-22T12:59:52Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-01-22T11:41:14Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-01-12T19:26:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "cfad421c40f74a7a3d3efa0f71caaa2cdb7d1997",
          "body": "…(#170)\n\n* feat(dom)!: add Loom app-level render scheduler (fixes #167, #168, #169)\n\nOne scheduler per WeftApp: every reactive region and prop is a\nlatest-value cell drained by a single flush fiber. Bursts conflate\n(latest-value-wins), commits run in registration order (outer before\ninner), and flus\n[…]\nrules\n(correcting false claims is mandatory, adding machinery detail is not).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(dom)!: Loom app-level render scheduler (fixes #167, #168, #169) …",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-24T14:39:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9b620e67f0e8d49c7b77c1e8315dfa87fd572638",
          "body": "* docs: raise code/prose ratio in tutorial pages 01-04\n\nRewrite the four tutorial pages around one continuous counter app.\nFix two API inaccuracies: Node resolves to an ElementDescriptor, not a\nDOM node, and server rendering requires AppRpcClientTag in context.\n\nCo-Authored-By: Claude Fable 5 <norep\n[…]\n.md\nwere already fixed in an earlier commit; confirmed not reproducible here.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Docs/code ratio pass (#166)",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-22T20:01:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d56857d90f045cd41ba9f7bf6e3559e4ebf449c2",
          "body": null,
          "is_bot": false,
          "headline": "docs: simplify root check",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-22T19:43:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd5b754b15c418451fd5a5be70f13ba6f2be2e32",
          "body": "* docs: raise code/prose ratio in tutorial pages 01-04\n\nRewrite the four tutorial pages around one continuous counter app.\nFix two API inaccuracies: Node resolves to an ElementDescriptor, not a\nDOM node, and server rendering requires AppRpcClientTag in context.\n\nCo-Authored-By: Claude Fable 5 <norep\n[…]\n.md's typed-failure example.\n\n* docs: fix oxfmt formatting\n\nvp check --fix cleanup across the branch (missed before earlier commits).\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Docs/code ratio pass (#165)",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-22T19:33:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0224e0ded33143aab2d33e650c9ef38db31e223c",
          "body": "* feat(core)!: make Subscribable data-first (brand-only interface)\n\nEffect 4 removed its Subscribable module; Weft's local replacement kept\nthe Effect 3 member-style shape. The public interface is now brand-only\nwith covariant phantom variance, and reads go through module accessors,\nmatching Effect \n[…]\n) and observe changes with\nSubscribable.changes(x).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* chore: dont mandate pr\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core)!: make Subscribable data-first (brand-only interface) (#164)",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-22T19:11:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "746b96532dc47e8052ec37b2b0d0a1a53050ee0d",
          "body": null,
          "is_bot": false,
          "headline": "docs: add client routing example",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-22T18:16:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70af6ca221a19a5855092abf11b9ae7487099855",
          "body": null,
          "is_bot": false,
          "headline": "docs: improve routing docs",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-22T18:16:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dad35ec24e1c0a59fc99f1dc90d68c34285375a8",
          "body": null,
          "is_bot": false,
          "headline": "docs: add more example code",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-22T17:53:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efd5a5499b05e5996b91a776c0517063a18008fe",
          "body": "Fans out multiple sub-agents; pinning avoids inheriting a pricier\nsession model and keeps token cost predictable.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(review-step): pin code-review sub-agents to Sonnet 5",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-20T14:01:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "49c6825f4b19528536d2de8fb5e46d4490d8c8c4",
          "body": "* feat(dom): add Props.merge and Props.cx for prop-bag composition\n\nWeft's answer to Base UI-style composition. A behavior primitive owns aria\nwiring, handlers and refs; the consumer owns the element. Because elements are\nplain data made by plain calls, ownership never leaves the consumer, so the\non\n[…]\ntry as its own <p>\nvia List.each instead of one joined string.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(dom): add Props.merge and Props.cx for prop-bag composition (#157)",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-20T12:39:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "553c123def5171d7a37bae190f07d10d78b0e9cb",
          "body": "…(#156)\n\n* docs: adopt terse JSDoc and docs-prose style rules\n\nRewrite the CLAUDE.md Documentation section with the new JSDoc rules\n(one-liners for self-evident exports, block length cap, no em-dashes)\nand add a Docs Prose Style subsection. Sync the same rules into the\nweft-docs-author agent and the\n[…]\npass, including the file that was\npreviously failing on import.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: adopt terser JSDoc/prose style and retrofit the whole codebase …",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-19T18:06:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "915eb9ed371bcda9ddb84708e3c949ceb5853d7a",
          "body": "One app = one lazy ManagedRuntime + one root Scope + one unhandled-error\nhub; each mount/hydrate creates a child root scope. Layer services are\nshared by reference across roots, so multi-root islands get cross-island\nreactive state for free.\n\n- New `WeftApp` namespace in @weftui/dom/client: make, mo\n[…]\nApp.mount(app, node, root)` /\n`WeftApp.hydrate(app, node, root)`; `Effect.provide` around mount calls\nno longer supplies services to components.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(dom)!: replace mount/hydrate with the WeftApp app runtime (#155)",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-19T12:25:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "87cfb5e316a392ccf23df7bc4ba6a30634720b5a",
          "body": "…t (#154)\n\nThe popstate handler forks commitTo onto a detached fiber and the\nNavigating emit is a further forkChild behind it, so a single tick after\ndispatching the event is occasionally not enough on slow CI runners.\nPoll for the Navigating state (the file's existing convention for\nbackground-fiber timing) — safe because the gated leaf blocks the commit,\nso the mid-flight window cannot be skipped.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: fix flaky mid-flight Navigating assertion in AC-R8 popstate tes…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T10:29:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3cd50721af8fe7308ff29a4e5a6beffc30debb43",
          "body": "* build: migrate type tests to TSTyche\n\nReplace the hand-rolled Expect<Equal<>> helpers and bare @ts-expect-error\nassertions in the 13 type-test files with TSTyche 7 matchers, renaming\n*.test-d.ts to *.tst.ts (and normalizing the stray combinator.test-d.ts\ninto __type-tests__/). Type tests now run v\n[…]\nnoreply@anthropic.com>\n\n* chore: prune gitignored plans/ from knowledge graph\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build: migrate type tests to TSTyche (#153)",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T10:23:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f40032da85925e30aa47469b56e994ea97657029",
          "body": "- typescript ^6.0.3 -> ^7.0.2 (native Go compiler); vp pack d.ts emit\n  now uses the experimental tsgo backend, output verified equivalent\n  to the 6.0.3 baseline (cosmetic diffs only)\n- vite-plus 0.2.2 -> 0.2.5 via vp migrate (adds TS7 declaration\n  generation support)\n- replace @effect/language-se\n[…]\n  tsserver plugins do not run under the TS7 native LSP; run\n  `pnpm lsp:patch` after install to patch the local binary. The\n  tsconfig plugins block is unchanged - @effect/tsgo reads the same\n  config",
          "is_bot": false,
          "headline": "build: upgrade to TypeScript 7 and Vite+ 0.2.5 (#152)",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T07:37:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e8e9e374b838e0bfe7fc7a34c629859b9684360",
          "body": "Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.1.9 to 4.1.10.\n- [Release notes](https://github.com/vitest-dev/vitest/releases)\n- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)\n- [Commits](https://github.com/vitest-dev/vitest/commit\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump vitest from 4.1.9 to 4.1.10 (#138)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T06:36:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "571990fef1a8fcc00f2c011ff244c9943a506cbc",
          "body": "* deps(deps): bump @types/node from 25.9.2 to 26.1.1\n\nBumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.9.2 to 26.1.1.\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/Defi\n[…]\nauthored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: stefvw93 <stef@stefvanwijchen.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": true,
          "headline": "deps(deps): bump @types/node from 25.9.2 to 26.1.1 (#146)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T06:33:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0031e8453f013ce7fdf5f5088a0c65cbc9070037",
          "body": "Bumps [@shikijs/rehype](https://github.com/shikijs/shiki/tree/HEAD/packages/rehype) from 3.23.0 to 4.3.1.\n- [Release notes](https://github.com/shikijs/shiki/releases)\n- [Commits](https://github.com/shikijs/shiki/commits/v4.3.1/packages/rehype)\n\n---\nupdated-dependencies:\n- dependency-name: \"@shikijs/\n[…]\nrect:development\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps-dev): bump @shikijs/rehype from 3.23.0 to 4.3.1 (#139)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T06:32:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0bf27210b4ba2f51a43d201e81f7e4ff329ea32d",
          "body": "…#145)\n\nBumps [@effect/language-service](https://github.com/Effect-TS/language-service) from 0.86.4 to 0.87.0.\n- [Release notes](https://github.com/Effect-TS/language-service/releases)\n- [Changelog](https://github.com/Effect-TS/language-service/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/\n[…]\nrect:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps-dev): bump @effect/language-service from 0.86.4 to 0.87.0 (…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T06:24:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f78698c5fd8b51d39c071d45a87fa2cb6a55b3dc",
          "body": "Bumps [tsx](https://github.com/privatenumber/tsx) from 4.22.4 to 4.23.1.\n- [Release notes](https://github.com/privatenumber/tsx/releases)\n- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)\n- [Commits](https://github.com/privatenumber/tsx/compare/v4.22.4...v4.23.1)\n\n--\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump tsx from 4.22.4 to 4.23.1 (#148)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T06:24:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a8ef155d2f40df65611078a65ba6b37c0ed8b8fc",
          "body": "…-5.6.18\n\ndeps(deps-dev): bump daisyui from 5.6.6 to 5.6.18",
          "is_bot": false,
          "headline": "Merge pull request #147 from stefvw93/dependabot/npm_and_yarn/daisyui…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T06:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a39750749f73c31b69d16a777d8c46a5bbe16dba",
          "body": "…ment-dependencies-703aab683a\n\ndeps(deps-dev): bump @types/hast from 3.0.4 to 3.0.5 in the development-dependencies group",
          "is_bot": false,
          "headline": "Merge pull request #144 from stefvw93/dependabot/npm_and_yarn/develop…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T06:20:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b973232848840dc67efde03417549a2a76f2c5af",
          "body": "…ns/configure-pages-6\n\nci(deps): bump actions/configure-pages from 5 to 6",
          "is_bot": false,
          "headline": "Merge pull request #143 from stefvw93/dependabot/github_actions/actio…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T06:19:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5181536dce1054978130f046dcbbbe1889974ab8",
          "body": "…ns/upload-pages-artifact-5\n\nci(deps): bump actions/upload-pages-artifact from 4 to 5",
          "is_bot": false,
          "headline": "Merge pull request #141 from stefvw93/dependabot/github_actions/actio…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T06:19:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56499c74c4a7afb283bc768adb3846e3e249c43e",
          "body": "…ns/deploy-pages-5\n\nci(deps): bump actions/deploy-pages from 4 to 5",
          "is_bot": false,
          "headline": "Merge pull request #142 from stefvw93/dependabot/github_actions/actio…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T06:19:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3ef2aad1f27f5db3d3ca25fc954a3e7c515160c",
          "body": "…browser-playwright-4.1.10\n\ndeps(deps): bump @vitest/browser-playwright from 4.1.9 to 4.1.10",
          "is_bot": false,
          "headline": "Merge pull request #137 from stefvw93/dependabot/npm_and_yarn/vitest/…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T06:18:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d7574e751a820b811d69731293368dbd77ee364",
          "body": "….3.1\n\ndeps(deps-dev): bump shiki from 3.23.0 to 4.3.1",
          "is_bot": false,
          "headline": "Merge pull request #136 from stefvw93/dependabot/npm_and_yarn/shiki-4…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T06:18:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f88f96ab3430655d72c63c736eb83a0f393418bf",
          "body": "…c-release/github-12.0.9\n\ndeps(deps-dev): bump @semantic-release/github from 12.0.8 to 12.0.9",
          "is_bot": false,
          "headline": "Merge pull request #135 from stefvw93/dependabot/npm_and_yarn/semanti…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T06:18:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5304847118f65f3e611a8a84b469ab33b9ba140",
          "body": "docs: repoint effect 4 reference clone to canonical Effect-TS/effect",
          "is_bot": false,
          "headline": "Merge pull request #151 from stefvw93/docs/effect-smol-to-canonical-repo",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T05:57:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b06ef31d32e1ec869b2f1b068790be9cf88425bb",
          "body": "effect-smol merged into Effect-TS/effect and was archived read-only;\nEffect 4 development now lives on that repo's main branch (v3 on the\nv3 branch). Update the AI-agent reference-clone docs accordingly:\n\n- CLAUDE.md \"Effect 4 Reference\": clone Effect-TS/effect main as\n  ./effect-src, note main=v4/v\n[…]\no no runtime code, package versions, or peer ranges change. The\nbump-effect-beta automation is untouched (verified via --dry-run).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: repoint effect 4 reference clone to canonical Effect-TS/effect",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-18T05:46:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3c7ed03136aad4f83ee4a577f01fd244057b17d3",
          "body": "…mp-98\n\nEffect beta automation + bump to 4.0.0-beta.98",
          "is_bot": false,
          "headline": "Merge pull request #150 from stefvw93/chore/effect-beta-automation-bu…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-17T11:56:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26f565aed941e94ecff861ca72074718638ee1fb",
          "body": "Moves the tested floor from 4.0.0-beta.93: catalog pin, peer ranges\n(>=4.0.0-beta.98 <4.0.0), and the tested-against doc tokens.\n\nMigrates @weftui/router for two upstream renames in the beta line\n(confirmed against the installed dist):\n- HttpApi.Any -> HttpApi.Top\n- HttpApiEndpoint name -> identifie\n[…]\nlders are gone too — buildHttpApi\n  already used the options form, so only prose needed updating.\n\nvp run check / test / test:browser all green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(deps): bump effect to 4.0.0-beta.98",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-17T11:54:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b896dc9352b9f92aa647391234c7cfdac9b8672",
          "body": "…mantics\n\nAdds the /effect-beta skill, scripts/bump-effect-beta.mjs (rewrites the\ncatalog pin, peer floors, and doc tested-floor tokens together), and a\ndaily workflow that bumps to the latest 4.0.0-beta.N, validates, and\nopens a fix(deps) PR (draft when validation is red).\n\nAlso corrects stale Effe\n[…]\nped → acquireRelease-backed Layer.effect,\nand the unobserved-fiber logging description (Weft now watches region\nexits and logs failures itself).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: add effect-beta bump automation and sync docs with Effect 4 se…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-17T11:54:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a24d1b09588d47db6794e84fe928202afb8c5b1e",
          "body": "fix(release): keep breaking changes as minor bumps while pre-1.0",
          "is_bot": false,
          "headline": "Merge pull request #149 from stefvw93/fix/semver-guard-pre-1.0",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-17T10:03:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0e0445b05eb36afe39b317bd57f4c8af78e445f",
          "body": "semantic-release's default commit-analyzer rule maps breaking changes to a\nmajor bump with no 0.x awareness, which pushed the Effect 4 migration out as\n1.0.0. Override breaking -> minor until Weft intentionally goes 1.0 (remove\nthis rule at that point).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(release): keep breaking changes as minor bumps while pre-1.0",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-17T09:17:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6fbac06f7dddd2dd53d78e56a05cd84303c5e62",
          "body": "Bumps [@vitest/browser-playwright](https://github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright) from 4.1.9 to 4.1.10.\n- [Release notes](https://github.com/vitest-dev/vitest/releases)\n- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)\n- [Commits](https://git\n[…]\nname: \"@vitest/browser-playwright\"\n  dependency-version: 4.1.10\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump @vitest/browser-playwright from 4.1.9 to 4.1.10",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-17T09:12:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f4011e565dabec5f643bca315fed05f550ad3c98",
          "body": "Bumps [@semantic-release/github](https://github.com/semantic-release/github) from 12.0.8 to 12.0.9.\n- [Release notes](https://github.com/semantic-release/github/releases)\n- [Commits](https://github.com/semantic-release/github/compare/v12.0.8...v12.0.9)\n\n---\nupdated-dependencies:\n- dependency-name: \"@semantic-release/github\"\n  dependency-version: 12.0.9\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps-dev): bump @semantic-release/github from 12.0.8 to 12.0.9",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-17T09:12:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82ec5530f96d0a5be2d511c14f020f91be7a3b89",
          "body": "Migrate to Effect 4 (effect@4.0.0-beta.93)",
          "is_bot": false,
          "headline": "Merge pull request #131 from stefvw93/feat/effect-4-migration",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-17T09:09:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "daa869e60c78f5d0c275512f1b1effa8f37deafd",
          "body": null,
          "is_bot": false,
          "headline": "chore: docs author",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-17T07:08:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e42e7c00909f86730f8ad95421cacdcab1d7f8e3",
          "body": "Bumps [daisyui](https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui) from 5.6.6 to 5.6.18.\n- [Release notes](https://github.com/saadeghi/daisyui/releases)\n- [Changelog](https://github.com/saadeghi/daisyui/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/saadeghi/daisyui/commits/v5\n[…]\nncies:\n- dependency-name: daisyui\n  dependency-version: 5.6.18\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps-dev): bump daisyui from 5.6.6 to 5.6.18",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T09:12:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d8be06a5c9d26ad31d33a6795ec5def9035bf750",
          "body": "Bumps the development-dependencies group with 1 update: [@types/hast](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/hast).\n\n\nUpdates `@types/hast` from 3.0.4 to 3.0.5\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/De\n[…]\ncy-version: 3.0.5\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: development-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps-dev): bump @types/hast in the development-dependencies group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T09:09:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16540b045b66ea616cee9f983f846c2a65a82ae8",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(graphify): refresh knowledge graph",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-12T07:55:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bb75db2e6b28231f73ac9a2a0b74e1ebbc302755",
          "body": "…DE.md\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): document the effect-smol local reference clone in CLAU…",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-12T07:53:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "caf81a85c94eccd70e3e37128d9c32c42b890ccc",
          "body": "@effect-atom/atom has been upstreamed into Effect 4 as the built-in\nunstable module effect/unstable/reactivity (Result -> AsyncResult,\nRegistry.layer -> AtomRegistry.layer; Atom API unchanged). Drop the\nexternal dependency, re-include the example in the pnpm workspace, and\nremove the lint/format/bro\n[…]\nter's initial render before\nclicking: v4 atoms are lazy, so an update fired before the first\nsubscriber is live is not retained by the registry.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(effect4): migrate effect-atom example to effect/unstable/reactivity",
          "author_name": "Stef van Wijchen",
          "author_login": "stefvw93",
          "committed_at": "2026-07-12T07:53:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4202d38ad91e6a075aa62a2c53ac7e4ecefa11e3",
          "body": "Bumps [actions/configure-pages](https://github.com/actions/configure-pages) from 5 to 6.\n- [Release notes](https://github.com/actions/configure-pages/releases)\n- [Commits](https://github.com/actions/configure-pages/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/configure-pages\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump actions/configure-pages from 5 to 6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-06T14:34:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d97f41f2838d94f0c55144a05cacd860406b1fd",
          "body": "Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 4 to 5.\n- [Release notes](https://github.com/actions/deploy-pages/releases)\n- [Commits](https://github.com/actions/deploy-pages/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/deploy-pages\n  dependency-version: '5'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump actions/deploy-pages from 4 to 5",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-06T14:34:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1893c4763fa7c636f36c404a781f2c3a45689dc4",
          "body": "Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 4 to 5.\n- [Release notes](https://github.com/actions/upload-pages-artifact/releases)\n- [Commits](https://github.com/actions/upload-pages-artifact/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-pages-artifact\n  dependency-version: '5'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump actions/upload-pages-artifact from 4 to 5",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-06T14:33:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "285bc30470f417798f1e8ca5350c40041626e658",
          "body": "Bumps [shiki](https://github.com/shikijs/shiki/tree/HEAD/packages/shiki) from 3.23.0 to 4.3.1.\n- [Release notes](https://github.com/shikijs/shiki/releases)\n- [Commits](https://github.com/shikijs/shiki/commits/v4.3.1/packages/shiki)\n\n---\nupdated-dependencies:\n- dependency-name: shiki\n  dependency-version: 4.3.1\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps-dev): bump shiki from 3.23.0 to 4.3.1",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-06T09:09:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7551a083ce19295e8beece3613d077e57ee37e1",
          "body": "CI failed (green locally) because examples/effect-atom is excluded from the pnpm\nworkspace — so its deps (effect, @weftui/*, @effect-atom/atom) aren't installed\nin a clean checkout, and type-aware lint can't resolve its imports (TS2307 x14).\nLocally it passed only on stale node_modules. Add examples/effect-atom/** to the\nlint + fmt ignorePatterns until @effect-atom/atom ships an Effect 4 build.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(effect4): exclude effect-atom example from lint/format check",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-06T07:29:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0640b42265a6b64440055e0900b6a8f8d976e88e",
          "body": "Phase 11. The client-first Boundary.rpc test relied on a 30ms Effect.delay being\nlonger than mount time to observe the fallback before the swap — a race that\nflaked intermittently under Effect 4's fiber scheduling. Gate the rpc resolve on\na test-controlled Deferred instead: the call provably parks u\n[…]\nthe test opens\nthe gate, so the fallback is deterministically observable, then opening it drives\nthe swap. 3/3 isolated runs pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): gate Boundary.rpc mount test on a Deferred (de-flake)",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T15:13:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1a3bc289b39daa74444b08f4a5850e95d27ae047",
          "body": "Phase 11. The httpApi-spine test's HttpApiView typed endpoint params/query/error\nas Schema.Top, but Schema.decodeUnknownSync/decodeUnknownResult need a Codec —\nTS2345 ('Top' not assignable to ConstraintDecoder). Type the view's schemas as\nSchema.Codec<unknown, unknown> (the runtime values are codecs) and drop the now-\nredundant Schema.Top cast. vp run check is green (exit 0, 0 type/format issues).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): compile.test schemas typed as Codec for decode calls",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T15:09:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "563c75d9101e224db807a92a2d42818c2cc20778",
          "body": "Phase 11. vp check reformats markdown code fences (project convention uses\n'yield *' with a space, and aligned tables); the docs-agent's edits introduced\n'yield*' which oxfmt normalizes back. Apply vp check --fix so the committed docs\nmatch a clean vp run check.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(effect4): restore oxfmt markdown convention in migrated docs",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T15:06:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "32e1a561aa6bc415156d67f326652635766a40b0",
          "body": "… README)\n\nPhase 10 (weft-docs-author agent, final batch). Refinement pass on\nboundaries-and-suspense.md + ssr-hydration readme + dom/README (SubscriptionRef\n.changes function form, Boundary catch* names). Completes the docs sweep.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): final docs-agent edits (boundaries, ssr-hydration, dom…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T15:02:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b7d3ad6d4d855f9e2c758bdaba52f8bcff3e5645",
          "body": "…ng docs\n\nPhase 10 straggler. Effect 4 renamed the class form to Schema.TaggedErrorClass\n(no bare Schema.TaggedError); RouterNotFound/RouterParamsError are modeled with it.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): Schema.TaggedError -> Schema.TaggedErrorClass in routi…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T15:01:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce046f940a6f6e7d76b5839783f3d92a430583f0",
          "body": "Phase 10 (weft-docs-author agent, cont.). Verified: Subscribable.changes stays a\nmember (Weft keeps the v3 accessors on its own Subscribable); only SubscriptionRef\n.changes/.get became functions. No residual Effect-3 refs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): author-components + use-element-refs prose migration",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T15:00:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "849599a7973a4628221d2527a5a06998ab48a852",
          "body": "…onRef.changes fn)\n\nPhase 10 (weft-docs-author agent, cont.). reactive-primitives + element-ref\nreadmes: SubscriptionRef .changes/.get member access -> the function form\nSubscriptionRef.changes(ref); form-handling readme: Schema.filter -> Schema.check\n(Schema.makeFilter(...)); core README Boundary table: catchAll/catchSome/\ncatchAllCause -> catch/catchFilter/catchCause. Verified no residual Effect-3 refs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): more prose/readme migrations (Schema.check, Subscripti…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:59:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce7f35c6a84fa3982293965c938d4baa4522dd9e",
          "body": "Phase 10 (weft-docs-author agent). Update docs/ (tutorial, explanation, how-to,\nreference) and the example readmes to the migrated APIs: @effect/rpc ->\neffect/unstable/rpc and @effect/platform -> effect/unstable/{http,httpapi};\nContext.Tag -> Context.Service; Schema.Schema -> Schema.Codec; Boundary \n[…]\nmString->NaN routing caveat; and Subscribable now from\n@weftui/core. Verified: no residual Effect-3 API references remain in docs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): migrate prose docs + example readmes to Effect 4 APIs",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:57:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c966ee4bac183b60839998e665eab44384562d5a",
          "body": "Phase 10 stragglers. Effect 4 represents log levels as strings, so comments\nreferencing LogLevel.Error now say the \"Error\" level; and the link navigate\ndispatch comment references Effect.runForkWith (v4) instead of Runtime.runFork.\nComment-only — no behavior change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): fix stale API names in source comments",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:55:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ba3d30280c09d1de0ece66a117fc8fa413b48aee",
          "body": "Phase 10 follow-up: the last @effect/platform reference — server dispatch runs\nthrough effect/unstable/httpapi HttpApiBuilder in Effect 4.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): router.specs HttpApiBuilder is in effect/unstable/httpapi",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:53:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5146af0833c488963dec332609ee3a85f5b4f478",
          "body": "Phase 10. Context.Tag -> Context.Service (Router, Router.Outlet, SuspenseContext,\nBoundaryContext, Greeting, Docs); Effect.catchAll -> Effect.catch and\nEffect.catchAllCause -> Effect.catchCause; Boundary.catchAll -> Boundary.catch;\nand note the router M7/M8 caveat that Effect 4 NumberFromString maps non-numeric\nstrings to NaN (needs an explicit finite check to 404 on non-numbers).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): update remaining specs to v4 APIs",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:52:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3900b7dcf0842f018b0180a1f30d466552dbbff3",
          "body": "Phase 10. @effect/rpc -> effect/unstable/rpc; Schema.Schema<any, any> ->\nSchema.Codec<any, any>; AppRpcClientTag uses the Context.Service form\n(Context.Service<Self, Shape>()(id)). Rpc field names (payloadSchema/\nsuccessSchema/errorSchema) are unchanged in v4, so those stay.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): update boundary-rpc.specs to v4 imports/types",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:49:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "19150209b3e06d5fa4b0d8b1865591290b570021",
          "body": "Phase 10. Rename the failure-boundary spec references to the migrated names:\ncatchAll -> catch, catchAllCause -> catchCause, catchSome -> catchFilter (now a\npositional Filter + fallback, mirroring Effect 4's Effect.catchFilter — no longer\nan Option-returning props object). Update the match semantics (Cause.failureOption\n-> Cause.findErrorOption; Filter Result.success/fail) and the API-surface block.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(effect4): update boundary.specs to v4 Boundary API",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:48:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9b173fce851048c6917cdbc2a4f79ef28df2de0e",
          "body": "AST-only refresh of the code graph (3338 nodes, 4798 edges) reflecting the\nEffect 4 migration changes across packages and examples.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(effect4): update graphify knowledge graph after migration",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:42:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e455587caae9a92acdd64454b7aad4cb317c61c2",
          "body": "Phase 9 (browser tests). Effect 4's Effect.runSyncExit uses a bare runtime with\nno services, so renderNode's sync-resolution probe failed for any component that\nreads a service (e.g. a route leaf reading Router) — forcing it onto the async\nstream-marker path. A later static render (the resolve-befor\n[…]\nigation\npatchQuery browser test (browser suite now fully green). Also folds in oxfmt\nformatting of two migrated router test files.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): sync-resolution probe runs under the ambient context",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:41:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0c63b9067f285bf1e1cf439784a0da29f07d58a0",
          "body": "Phase 9. Formatting-only changes (oxfmt ternary parenthesization and line\ncollapsing) that vp check --fix applied during the migration but were left\nuncommitted because earlier commits staged only the substantive edits. Commit\nthem so the committed tree matches a clean vp run check.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(effect4): apply oxfmt formatting to migrated files",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:28:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7183b9c3c9c2930028933b56133ea112e23b5564",
          "body": "…shims\n\nPhase 9 (browser tests). The Effect 4 rpc HTTP transport posts to /_eui/rpc/\n(normalized trailing slash), but the shims matched the exact string /_eui/rpc,\nso they never intercepted the request — it hit the real fetch and returned an\nempty/failed response (app client-first) or a stale value (refetch). Strip a\ntrailing slash before matching. Fixes the app + refetch rpc round-trip browser\ntests (4 -> 1 failing).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): match /_eui/rpc with optional trailing slash in fetch …",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:19:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f30f6349b126fb9dbaa09c74ade4ffdbf70f5715",
          "body": "Phase 9 (browser tests). Effect 4's rpc web handler streams its ndjson response\nbody from a scope that closes when the handler returns; relaying that live stream\nstraight through the test's window.fetch override delivers an empty body to the\nrpc client (\"Received empty HTTP response\"). Read the resp\n[…]\nansport (its\nassertions now exercise real stock values); the app client-first mount has a\nfurther timing issue tracked separately.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): buffer rpc web-handler response in browser fetch shims",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:13:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "22d8f9c4854b0876e43a74cae62480999468bc8d",
          "body": "Phase 9 (browser tests). Two mismatches broke the Boundary.rpc round-trip:\n- RpcServer.layerHttp defaults to the websocket protocol; pass protocol:\"http\"\n  so the server speaks the same HTTP transport as the client's layerProtocolHttp.\n- The HTTP transport streams each rpc message, so layerJson conc\n[…]\ne-delimited).\n\nError advanced from a decode failure to an empty/500 response (server-side rpc\nhandling still under investigation).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): RPC over HTTP uses protocol:http + ndjson serialization",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T14:04:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d6c00126ba26a18274ae08ad6fc3e38bfe53fc95",
          "body": "Phase 9 (browser tests). examples/effect-atom is excluded from the pnpm\nworkspace pending an Effect 4 build of @effect-atom/atom; its browser test pulls\neffect@3-only APIs (NoSuchElementException, GenericTag, SyncScheduler) that break\nthe browser build's dep optimization. Exclude it from vitest.browser.config.ts\ntoo, mirroring the workspace exclusion.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): exclude effect-atom example from browser test run",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:50:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e5ebacc46b60bdb1b160928b5c87b518ce7922ae",
          "body": "Phase 9 (tests). Effect 4 runs Effect.sleep(\"0 millis\") synchronously, so the\nSSR sync-resolution probe (runSyncExit) resolved the Card inline and emitted no\nstream-start markers, failing the hydrate round-trip assertion. Use a 1ms sleep\nso the async path (with reactive-region markers) is taken as intended.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): force async SSR path with sleep(1 millis) in round-trip",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:48:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2385b2e4d814f179296a41deb7a3618a9d6e2249",
          "body": "Phase 9 (tests). Effect 4 forks the reactive-prop subscription lazily, so the\nStream.make(\"a\", \"b\") id had only adopted the server value \"a\" when unmount tore\nthe subscription down, leaving id=\"a\". Wait a tick (like AC-H11) so the sync\nstream drains to \"b\" before unmount; the idempotent-unmount assertion is\nunchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): let reactive prop settle before unmount in AC-H9",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:46:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5770e58ada3b7a03aec42178cf0bbc85ea57a57f",
          "body": "…terrupt\n\nPhase 9 (tests). Effect 4 forks resolution fibers lazily (Effect.forkIn defers\nthe first step), so when the main walk fails before a just-forked fiber runs, it\nis discarded un-started and the child's onInterrupt never fires — the v3 proxy\nthe test relied on. Assert the real guarantee inste\n[…]\nling\nEffect.never boundary, the enclosing Effect.scoped still completes (a leaked\nfiber would hang it) and the shell Effect fails.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): AC-SH2 asserts no-leak via scoped completion, not onIn…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:44:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "59a7b9d7f817ba7e12184152877f02f1f17b827b",
          "body": "…ng fibers\n\nPhase 9 (tests, AC-SH6). The patch stream ends only at a terminal None, offered\nby the last-settling boundary or the no-suspense fast path. If the scope closes\nwhile resolution fibers are still pending (consumer disconnect), those fibers are\ninterrupted before offering None, so a patch consumer hangs. Add a scope\nfinalizer that offers None on close; harmless after a normal close (None already\nsent). Fixes AC-SH6.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): terminate SSR patch stream when scope closes with pendi…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:42:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2efeffa55bef563e61d9a7b542e2207d7e37dd5b",
          "body": "Phase 9 (tests). Effect 4's Schema.NumberFromString maps a non-numeric string to\nNaN and succeeds, so /users/abc decoded to { id: NaN } and matched instead of\n404-ing. M7 (path-param decode failure is a no-match) needs a schema that\ngenuinely fails; add a finite check to the fixture's :id so 'abc' is a real\ndecode failure. Real numeric-param routes wanting a 404 on non-numbers need the\nsame guard under v4.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): matcher M7 fixture rejects NaN for :id decode failure",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:28:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "55da9fdc857f0313aa7fe23e75be9418da933975",
          "body": "Phase 9 (tests). The httpApi-spine tests read the v3 endpoint shape\n(pathSchema/urlParamsSchema Options, a single errorSchema). Effect 4 endpoints\nexpose params/query (Schema.Top | undefined) and error as a ReadonlySet of\nschemas, each carrying its own httpApiStatus annotation. Update HttpApiView an\n[…]\ns/query defined + decode; iterate the error set for the\n404-annotated RouterNotFound schema. Drop unused Option/SchemaAST imports.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): compile.test asserts v4 HttpApiEndpoint structure",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:24:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2fb2b12c39451cb252d1a1521487b040bf21d87c",
          "body": "Phase 9 (tests). Effect 4 HttpApiEndpoint handlers receive request.params /\nrequest.query (not v3's request.path / request.urlParams). The SSR leaf handler\nbuilt a Matched with undefined path/query, so the outlet's pick(fields, record)\ncrashed with 'Cannot read category/id/oid of undefined'. Read request.params /\nrequest.query. Fixes the website SSR route cluster.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): SSR match reads v4 handler request.params/query",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:20:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "327ed9ada6c9431820b19daf78724be5d93080d3",
          "body": "…usly\n\nPhase 9 (tests). renderChildren — the shared array/fragment path — routed every\nEffect/Stream child through handleStreamChild (async stream markers). Static\nNodes are Effects (and iterable under Effect 4), so array/fragment children,\nmulti-child elements, and synchronous Suspense children ren\n[…]\nchronous); only genuinely reactive Effects/Streams\ntake the stream path. Fixes the dominant dom rendering cluster (suspense 6->1).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): renderChildren renders static-markup children synchrono…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:18:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9da3d539a50da74cc54687ff33c122cabc2b885e",
          "body": "Phase 9 (tests). renderSuspenseBoundary wrapped every Effect/Stream child in a\nfunction-component so it registers with the boundary — but static-markup Nodes\nare Effects too, so they were wrapped and rendered by an async fiber that,\nunder Effect 4, doesn't complete at mount (children absent). Fast-p\n[…]\n static Nodes straight through to renderNode (synchronous);\nthey never suspend anyway. Mirrors the renderElement static-child fix.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): pass static-markup children through suspense boundary",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:10:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "73b4cd798e6e7cb5c7e5a86f0c0fec2acd234c4d",
          "body": "…tionRef\n\nPhase 9 (tests). The AC-9 identity pass-through tests passed a SubscriptionRef\nand expected toSubscribable to return it by reference — only valid in v3 where\nSubscriptionRef was a Subscribable subtype. Build an explicit Subscribable.make\nview of the ref so isSubscribable short-circuits it (no ref/fiber forked) and\nthe identity + get assertions hold.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): source identity tests use a Subscribable, not Subscrip…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:09:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "60b5eb5782ff037ac0f6df51ca0c4ec03cd62e1b",
          "body": "Phase 9 (tests). Effect 4's HttpApiEndpoint stores path/query schemas as\nendpoint.params / endpoint.query (Schema.Top | undefined), not the v3\nendpoint.pathSchema / endpoint.urlParamsSchema Options. compileMatchers'\nOption.getOrElse(endpoint.pathSchema, ...) read undefined and crashed with\n'Cannot r\n[…]\n emptySchema;\nupdate EndpointShape; drop the unused Option import. Fixes the dominant test\nfailure cluster (matcher/link routing).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): matcher reads v4 HttpApiEndpoint params/query slots",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:05:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "93153e7f70c2d87f33988ecdc02411d976ca4b6d",
          "body": "Phase 9 (tests). renderElement routed every Effect/Stream child through the\nasync stream path (handleStreamChild + forkSupervised). Static-markup Nodes are\nEffects too, so they were rendered by a forked fiber that, under Effect 4's\nscheduling, no longer completes synchronously during mount — leaving\n[…]\ny reactive Effects/Streams\nthrough the stream path. (+4 tests; the router/HttpApi and dom-fragment failure\nclusters are separate.)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): render static-markup element children synchronously",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T13:02:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1431d781baadad042eeb05c02d7a1e06fc3e7f5e",
          "body": "…rence\n\nPhase 9 (final type error). Effect 4 makes Effect/Stream iterable (Yieldable —\ntheir Symbol.iterator yields the Effect, which is itself a Renderable), so an\nEffect/Stream child ambiguously satisfies Renderable's Iterable<Renderable>\nmember. Without a const type parameter TS then widens the c\n[…]\n UserService|DbService>.\n(Upstream is removing Effect.Yieldable — effect-smol#2163 — which will make the\nconst unnecessary later.)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): const type param on h children preserves tuple E/R infe…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:49:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5102f81dc71e5774ed33bfb6f5eee461e113829f",
          "body": "Phase 9. This test exercised the toSubscribable identity pass-through via a\nSubscriptionRef, which only worked because v3 SubscriptionRef was a Subscribable\nsubtype. v4 dropped that, so build an explicit Subscribable.make view of the ref\nand pass that as the Source; the underlying SubscriptionRef stays external and\nthe alive-after-unmount assertions are unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(effect4): pass a Subscribable (not SubscriptionRef) as Source",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:37:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "67efa7b8d54f989327ad369220136abeda2dd61e",
          "body": "Phase 9. Object.entries widens each style value to any; CSS values are\nstring | number, so assert that before String() to avoid the no-base-to-string\nlint (which would otherwise flag a possible '[object Object]').\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): satisfy no-base-to-string on style value stringify",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:35:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8c366451987d24aa58131151fd58b5d730691de5",
          "body": "Phase 9. The catchSome({ fallback: () => Option.none() }) -> catchFilter(Filter.\nmake(...)) conversion removed the only Option uses in these two tests; drop the\nnow-unused Option import (no-unused-vars).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): drop unused Option imports after catchFilter migration",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:34:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "34de4a735562098b254c95dfc491e4e25158e7db",
          "body": "Phase 9. Effect 4 renamed Fiber.RuntimeFiber -> Fiber.Fiber. Even though the\neffect-atom example is excluded from the workspace build (@effect-atom/atom has\nno v4 release), vp check still type-checks its files, and they resolve effect@4\nfine at the type level — so migrate this last effect-3 API rather than special-\ncase the type-checker.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): effect-atom test Fiber.RuntimeFiber -> Fiber.Fiber",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:32:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ac6a9567c14d02d36ce67bd8996c0fac5f24d715",
          "body": "Phase 9. Layer<never, unknown, unknown> (from Layer.provide(... as any)) isn't\nassignable to Layer<any, any, any> under v4 Layer variance. Drop the explicit\nannotations on apiRoutes/rpcRoutes and let inference stand; the downstream\nLayer.mergeAll(...) as any at HttpRouter.toWebHandler already loosens the type.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): drop router-server route-layer annotations",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:30:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "02e0a7adfc1b1374a7e9492e855a31eea51074df",
          "body": "Phase 9. Effect 4 made Schema.Literal single-argument. The RouterParamsError\n'source' field's two literals become Schema.Literals([\"path\", \"query\"]), which\nalso restores the \"path\" | \"query\" union so router-service.ts's\nnew RouterParamsError({ source: \"query\", ... }) type-checks (the field type had\ncollapsed to just the first literal).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): RouterParamsError source uses Schema.Literals",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:28:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "467e2a97d7d9e580144752ae6ce5d1acdbd64314",
          "body": "Phase 9. Effect 4 Stream.filterMap filters+maps via a Filter, not an\nOption-returning function. The SubscriptionRef.changes(ref) stream carries\nOption<A>; keep-and-unwrap the Some values with\nFilter.fromPredicateOption(identity) (passes when the predicate returns Some,\nyielding the inner value). Add the Filter import.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): Stream.filterMap takes a Filter (source.ts)",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:27:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f4cca4c5542472e7041dab044bb31dea0b6a6c26",
          "body": "Phase 9. A namespace cannot express 'export { catch_ as catch }' (TS1194 —\nexport declarations are not permitted in a namespace), so Boundary.catch was\nimpossible with Boundary as a namespace. Extract the namespace body to\nboundary-impl.ts as module-level exports (where the catch alias is valid, the\n[…]\n / .Resource etc. are unchanged for consumers. Symbols\n(FAILURE/SUSPENSE/SERVER_BOUNDARY) and CatchTag(s)E stay flat-exported too.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(core): extract Boundary to a module for the reserved-word catch",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:24:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8d32a5c3e879a0bfb93d96cf90100a3ab0f71b98",
          "body": "Phase 9. Effect 4 removed HttpApiSchema.getStatusErrorAST. HttpApiSchema.status(code)\nstores the code as an httpApiStatus annotation on the AST, so read it directly:\n(m.annotations as { httpApiStatus?: number })?.httpApiStatus. Drop the now-unused\nHttpApiSchema import. Still asserts each endpoint declares a 404.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): compile.test reads httpApiStatus annotation directly",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:21:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1d1198347ed6db02b040e0963acfd3c69ba76ed7",
          "body": "Phase 9. Mechanical stragglers:\n- core/stream/stream.ts: Stream.StreamTypeId -> Stream.TypeId (isStream guard).\n- list.test / mount-scoped.browser: counters.get(id)!.changes and\n  counter.value.changes are SubscriptionRefs -> SubscriptionRef.changes(...)\n  (correcting an over-eager earlier revert of\n[…]\n- core/stream/stream.test: drop .pipe(Effect.map(Chunk.toReadonlyArray))\n  (runCollect yields an array) + the unused Chunk import.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): Stream.TypeId + SubscriptionRef.changes/Chunk stragglers",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:17:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "23beb71b4b9dd3bb1c5daffe581801df4555ecb3",
          "body": "…le reads\n\nPhase 9. The blanket ref.changes -> SubscriptionRef.changes(ref) conversion\nmangled two Subscribable member reads (router.currentMatch.changes and\ncounter.value.changes) into X.SubscriptionRef.changes(Y). Those fields are\nSubscribables (whose .changes member is kept), so restore the member access.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): revert over-eager SubscriptionRef.changes on Subscribab…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:13:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "675da7aaf062caaf5c7c8ebdd5e14c8576c51a96",
          "body": "Phase 9. Effect 4 made Schema.Literal single-argument; multiple literals use\nSchema.Literals([...]) (the variadic -> array change). SortValue's three sort\norders become Schema.Literals([\"price-asc\", \"price-desc\", \"name\"]), which\nalso restores the switch-case narrowing (the value type was collapsing to just\nthe first literal).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): Schema.Literal(...) -> Schema.Literals([...])",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:12:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "130e2797c0ad361e0ca6a3dba59b13ed84cc7cdc",
          "body": "…ds array)\n\nPhase 9. Effect 4 Stream.runCollect returns an array, so the trailing\nEffect.map(Chunk.toReadonlyArray) is redundant and mistyped; remove it and the\nnow-unused Chunk import. The collected changes are already the readonly array\nthe assertions expect.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): source.test drop Chunk.toReadonlyArray (runCollect yiel…",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:10:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d03c339b7ba571b3fe4d3d3148ca2813f4bd34e8",
          "body": "Phase 9. Same v4 runtime migration as router-live: Effect.runtime<never>() +\nRuntime.runFork(runtime) -> Effect.context<never>() + Effect.runForkWith(services);\ndrop the unused Runtime import. Clears the cascade requirement error too.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): link.ts runtime APIs (context/runForkWith)",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:09:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "27c4ce0361fe92b78838fc19458ab2dbb8ebde59",
          "body": "Phase 9. Effect 4: Stream.runCollect yields an array (not Chunk) and Fiber.poll\nis now the fiber.pollUnsafe() method.\n- Chunk.toReadonlyArray(chunks) -> chunks; Chunk.size(chunks) -> chunks.length;\n  drop the unused Chunk import.\n- Fiber.poll(fiber) -> fiber.pollUnsafe(); poll._tag === \"None\" -> poll === undefined.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): render-to-stream.test arrays + Fiber.pollUnsafe",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:08:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d565a758c68b5466e4755e97a25bede78c34bf2d",
          "body": "Phase 9. Effect 4: Stream pull/runCollect yield arrays (not Chunk), and\nCause.failures was removed.\n- Chunk.join(yield* pull, \"\") -> (yield* pull).join(\"\"); Chunk.size(collected)\n  -> collected.length; drop the now-unused Chunk import.\n- Cause.failures(c) -> c.reasons.filter(Cause.isFailReason).map((r) => r.error).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): streaming-shell.test arrays + Cause.reasons",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:07:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "09de1c66a5181cbf06376c56c57ab06634686b9c",
          "body": "Phase 9. Effect 4 logger changes:\n- Logger.replace(defaultLogger, logger) -> Logger.layer([logger]) (replaces by\n  default; still a Layer consumers provide).\n- Logger.make Options dropped ; read them from the fiber via\n  fiber.getRef(References.CurrentLogAnnotations) (a Record now, not a Map).\n- Log\n[…]\nel.Error -> the string \"Error\" (LogLevel is a string union).\n- Cause.isEmpty(cause) -> cause.reasons.length > 0 (flattened Cause).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): log-capture test helper to v4 Logger API",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:05:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0608e32fab9dd3eeeb5b572444a4c826be8b8401",
          "body": "Phase 9. The Layer.provide(... as any) results carry unknown error/context\nchannels, so annotate apiRoutes/rpcRoutes as Layer.Layer<any, any, any>\n(the pipeline is intentionally loosely typed — runtime-assembled).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(effect4): loosen router-server route-layer annotations",
          "author_name": "stefvw93",
          "author_login": "stefvw93",
          "committed_at": "2026-07-05T12:02:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 45,
      "commits_last_year": 593,
      "latest_release_at": "2026-07-24T14:42:23Z",
      "latest_release_tag": "v0.31.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 20,
      "days_since_latest_release": 10,
      "mean_days_between_releases": 2.2
    },
    "artifacts": {
      "collected": true,
      "structure": [],
      "declarations": [
        {
          "name": null,
          "path": "package.json",
          "tokens": [
            "npm.private"
          ],
          "ecosystem": "npm"
        },
        {
          "name": "@weftui/core",
          "path": "packages/core/package.json",
          "tokens": [
            "npm.entry",
            "npm.peer_dependencies"
          ],
          "ecosystem": "npm"
        },
        {
          "name": "@weftui/dom",
          "path": "packages/dom/package.json",
          "tokens": [
            "npm.entry",
            "npm.peer_dependencies"
          ],
          "ecosystem": "npm"
        },
        {
          "name": "@weftui/router",
          "path": "packages/router/package.json",
          "tokens": [
            "npm.entry",
            "npm.peer_dependencies"
          ],
          "ecosystem": "npm"
        },
        {
          "name": "@weftui/vite",
          "path": "packages/vite/package.json",
          "tokens": [
            "npm.entry",
            "npm.peer_dependencies"
          ],
          "ecosystem": "npm"
        }
      ]
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "readme_badges": {
        "hosts": [
          "github.com"
        ],
        "total": 1,
        "header": 1,
        "collected": true,
        "has_inspect_badge": false
      },
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "website",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "scraping",
            "web"
          ],
          "ecosystem": "npm",
          "categories": [],
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/website",
          "declared_type": null,
          "is_deprecated": false,
          "latest_version": "0.1.1",
          "repository_url": "https://github.com/akoenig/node-website",
          "versions_count": 2,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1677,
          "first_published_at": "2013-04-29T19:45:26.593000Z",
          "latest_published_at": "2013-05-14T20:47:23.347000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4829
        },
        {
          "name": "@weftui/dom",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "dom",
            "effect",
            "hydration",
            "renderer",
            "ssr",
            "weft"
          ],
          "ecosystem": "npm",
          "categories": [],
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@weftui/dom",
          "declared_type": null,
          "is_deprecated": false,
          "latest_version": "0.31.0",
          "repository_url": "https://github.com/stefvw93/weft",
          "versions_count": 22,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2088,
          "first_published_at": "2026-06-08T12:43:22.558000Z",
          "latest_published_at": "2026-07-24T14:42:19.108000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 10
        },
        {
          "name": "@weftui/core",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "combinators",
            "dom",
            "effect",
            "reactive",
            "ssr",
            "ui",
            "weft"
          ],
          "ecosystem": "npm",
          "categories": [],
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@weftui/core",
          "declared_type": null,
          "is_deprecated": false,
          "latest_version": "0.31.0",
          "repository_url": "https://github.com/stefvw93/weft",
          "versions_count": 22,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2256,
          "first_published_at": "2026-06-08T12:43:19.571000Z",
          "latest_published_at": "2026-07-24T14:42:15.978000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 10
        },
        {
          "name": "@weftui/router",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "effect",
            "nested-routes",
            "router",
            "routing",
            "ssr",
            "weft"
          ],
          "ecosystem": "npm",
          "categories": [],
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@weftui/router",
          "declared_type": null,
          "is_deprecated": false,
          "latest_version": "0.31.0",
          "repository_url": "https://github.com/stefvw93/weft",
          "versions_count": 21,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1895,
          "first_published_at": "2026-06-08T12:43:25.951000Z",
          "latest_published_at": "2026-07-24T14:42:22.146000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 10
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 38,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-27",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 27
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "demos",
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "examples/async-data-loading/tsconfig.json",
        "examples/declarative-event-handlers/tsconfig.json",
        "examples/effect-atom/tsconfig.json",
        "examples/element-ref/tsconfig.json",
        "examples/error-boundary/tsconfig.json",
        "examples/form-handling/tsconfig.json",
        "examples/headless-menu/tsconfig.json",
        "examples/keyed-list/tsconfig.json",
        "examples/list-rendering/tsconfig.json",
        "examples/reactive-styles/tsconfig.json",
        "examples/router-client/tsconfig.json",
        "examples/router-ssr/tsconfig.json",
        "examples/server-boundary/tsconfig.json",
        "examples/shared-state-islands/tsconfig.json",
        "examples/ssr-hydration/tsconfig.json",
        "examples/subscription-ref/tsconfig.json",
        "examples/suspense/tsconfig.json",
        "examples/type-augmentation/tsconfig.json",
        "packages/core/tsconfig.json",
        "packages/dom/tsconfig.json",
        "packages/router/tsconfig.json",
        "packages/vite/tsconfig.json",
        "website/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 314907,
      "source_files_sampled": 266,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 16995
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "website/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "underscore",
            "direct": false,
            "version": "1.4.4",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-cf4h-3jhx-xvhq",
              "GHSA-qpx9-hpmf-5gmw"
            ],
            "fixed_version": "1.13.8",
            "advisory_count": 2,
            "oldest_advisory_days": 1915
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "0.0.10",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-fjxv-7rqg-78g4",
              "GHSA-hmw2-7cc7-3qxx"
            ],
            "fixed_version": "4.0.6",
            "advisory_count": 2,
            "oldest_advisory_days": 378
          },
          {
            "name": "hawk",
            "direct": false,
            "version": "0.10.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-44pw-h2cw-w3vq",
              "GHSA-jcpv-g9rr-qxrc"
            ],
            "fixed_version": "9.0.1",
            "advisory_count": 2,
            "oldest_advisory_days": 2925
          },
          {
            "name": "hoek",
            "direct": false,
            "version": "0.7.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.8,
            "advisory_ids": [
              "GHSA-c429-5p7v-vgjp",
              "GHSA-jp4x-w63m-7wgm"
            ],
            "fixed_version": "9.0.3",
            "advisory_count": 2,
            "oldest_advisory_days": 3021
          },
          {
            "name": "http-signature",
            "direct": false,
            "version": "0.9.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-q257-vv4p-fg92"
            ],
            "fixed_version": "0.10.0",
            "advisory_count": 1,
            "oldest_advisory_days": 2824
          },
          {
            "name": "mime",
            "direct": false,
            "version": "1.2.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-wrvr-8mpx-r7pp"
            ],
            "fixed_version": "2.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 2936
          },
          {
            "name": "qs",
            "direct": false,
            "version": "0.5.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-6rw7-vpxm-498p",
              "GHSA-f9cm-p3w6-xvr3",
              "GHSA-gqgv-6jq5-jjj9",
              "GHSA-hrpp-h998-j3pp",
              "GHSA-jjv7-qpx3-h62q"
            ],
            "fixed_version": "6.14.1",
            "advisory_count": 5,
            "oldest_advisory_days": 3205
          },
          {
            "name": "request",
            "direct": true,
            "version": "2.20.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-7xfp-9c55-5vqj",
              "GHSA-p8p7-x288-28g6"
            ],
            "fixed_version": "3.0.0",
            "advisory_count": 2,
            "oldest_advisory_days": 2824
          },
          {
            "name": "tunnel-agent",
            "direct": false,
            "version": "0.3.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-xc7v-wxcw-j472"
            ],
            "fixed_version": "0.6.0",
            "advisory_count": 1,
            "oldest_advisory_days": 2618
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 6,
          "critical": 1,
          "moderate": 2
        },
        "advisory_count": 18,
        "affected_count": 9,
        "assessed_count": 40,
        "malicious_count": 0,
        "assessed_package": "npm:website@0.1.1",
        "unassessed_count": 0,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@weftui/core",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@weftui/dom",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@weftui/router",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "effect",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "catalog:"
        },
        {
          "name": "@weftui/core",
          "manifest": "packages/dom/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@weftui/core",
          "manifest": "packages/router/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@weftui/dom",
          "manifest": "packages/router/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        }
      ],
      "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": 15,
        "merged_prs": 107,
        "open_issues": 12,
        "closed_ratio": 0.2,
        "closed_issues": 3,
        "closed_unmerged_prs": 57
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "stefvw93",
          "commits": 555,
          "avatar_url": "https://avatars.githubusercontent.com/u/13518365?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci-release.yml",
        "effect-beta-bump.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "pnpm-lock.yaml"
      ],
      "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": "24 out of 24 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 0/16 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": 10,
            "reason": "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 12 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": 0,
            "reason": "16 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "cfad421c40f74a7a3d3efa0f71caaa2cdb7d1997",
        "ran_at": "2026-08-04T07:49:26Z",
        "aggregate_score": 4.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "recent_prs": {
        "merged_7d": 0,
        "decided_7d": 0,
        "merged_30d": 14,
        "authors_30d": 1,
        "decided_30d": 14,
        "sample_size": 60,
        "window_days": 30,
        "sample_exhausted": false,
        "authors_probed_30d": 1,
        "newcomer_merged_30d": 0,
        "bot_prs_excluded_30d": 24,
        "newcomer_authors_30d": 0,
        "newcomer_decided_30d": 0
      },
      "ci_last_run_at": "2026-08-04T06:52:45Z",
      "oldest_open_prs": [
        {
          "number": 114,
          "created_at": "2026-07-02T20:28:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 158,
          "created_at": "2026-07-20T09:09:21Z",
          "last_comment_at": "2026-07-20T09:09:22Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 161,
          "created_at": "2026-07-20T09:10:59Z",
          "last_comment_at": "2026-07-20T09:11:00Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 162,
          "created_at": "2026-07-20T09:11:33Z",
          "last_comment_at": "2026-07-20T09:11:34Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 163,
          "created_at": "2026-07-20T14:34:29Z",
          "last_comment_at": "2026-07-20T14:34:30Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 180,
          "created_at": "2026-07-24T15:32:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 181,
          "created_at": "2026-07-24T16:04:18Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 183,
          "created_at": "2026-07-24T19:56:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 188,
          "created_at": "2026-07-27T09:11:36Z",
          "last_comment_at": "2026-07-27T09:11:37Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 189,
          "created_at": "2026-07-27T09:12:10Z",
          "last_comment_at": "2026-07-27T09:12:11Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 190,
          "created_at": "2026-08-03T09:08:33Z",
          "last_comment_at": "2026-08-03T09:08:34Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 191,
          "created_at": "2026-08-03T09:09:10Z",
          "last_comment_at": "2026-08-03T09:09:11Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 192,
          "created_at": "2026-08-03T09:09:46Z",
          "last_comment_at": "2026-08-03T09:09:46Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 193,
          "created_at": "2026-08-03T09:10:41Z",
          "last_comment_at": "2026-08-03T09:10:42Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 194,
          "created_at": "2026-08-03T09:11:16Z",
          "last_comment_at": "2026-08-03T09:11:17Z",
          "last_comment_author": "dependabot"
        }
      ],
      "last_merged_pr_at": "2026-07-24T14:39:04Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 168,
          "created_at": "2026-07-23T20:11:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 169,
          "created_at": "2026-07-23T20:11:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 171,
          "created_at": "2026-07-24T14:59:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 172,
          "created_at": "2026-07-24T14:59:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 173,
          "created_at": "2026-07-24T14:59:03Z",
          "last_comment_at": "2026-07-24T17:49:40Z",
          "last_comment_author": "stefvw93"
        },
        {
          "number": 174,
          "created_at": "2026-07-24T14:59:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 175,
          "created_at": "2026-07-24T14:59:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 176,
          "created_at": "2026-07-24T14:59:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 177,
          "created_at": "2026-07-24T14:59:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 178,
          "created_at": "2026-07-24T14:59:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 179,
          "created_at": "2026-07-24T14:59:29Z",
          "last_comment_at": "2026-07-24T19:12:51Z",
          "last_comment_author": "stefvw93"
        },
        {
          "number": 182,
          "created_at": "2026-07-24T17:49:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/stefvw93/weft",
    "host": "github.com",
    "name": "weft",
    "owner": "stefvw93"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": "The weighted overall 60 is calibrated to 65 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 60,
            "calibrated": 65,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 65,
      "inputs": {
        "security": 40,
        "vitality": 87,
        "community": 46,
        "governance": 45,
        "calibration": "2026-08-02",
        "engineering": 75,
        "ai_readiness": 71,
        "weighted_overall_raw": 60
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 87,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "commits_last_year": 593,
              "human_commit_share": 0.87,
              "days_since_last_push": 0,
              "active_weeks_last_year": 20
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "20/52 weeks with commits",
                "points": 13.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 20
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "593 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 593
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 12 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "exceptional",
            "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": 100,
            "inputs": {
              "releases_count": 45,
              "latest_release_tag": "v0.31.0",
              "releases_from_tags": false,
              "days_since_latest_release": 10,
              "mean_days_between_releases": 2.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "45 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 45
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 10 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.2
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 11,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 11 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 11
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "weak",
        "name": "Community & Adoption",
        "value": 46,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "forks": 1,
              "stars": 38,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "38 stars",
                "points": 25.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 38
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": 1,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "readme_badge_services": [
                "github.com"
              ],
              "has_pull_request_template": true
            },
            "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 63,
            "inputs": {
              "packages": [
                "@weftui/dom",
                "@weftui/core",
                "@weftui/router"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 6239
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "6,239 downloads/month across npm",
                "points": 50.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 6239,
                      "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": "weak",
        "name": "Sustainability & Governance",
        "value": 45,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 32,
            "inputs": {
              "merged_prs": 107,
              "open_issues": 12,
              "closed_issues": 3,
              "prs_merged_7d": 0,
              "prs_decided_7d": 0,
              "prs_merged_30d": 14,
              "prs_decided_30d": 14,
              "issue_closed_ratio": 0.2,
              "closed_unmerged_prs": 57,
              "first_time_authors_30d": 0,
              "first_time_prs_merged_30d": 0,
              "first_time_prs_decided_30d": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "20% of issues closed",
                "points": 8.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 20
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "107/164 decided PRs merged",
                "points": 19.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 107,
                      "decided": 164
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/16 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "followers": 14,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "stefvw93",
              "public_repos": 23,
              "account_age_days": 4025
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "14 followers of stefvw93",
                "points": 8.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 14,
                      "login": "stefvw93"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "23 public repos, account ~11 yr old",
                "points": 22.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 23
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "exceptional",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@weftui/dom",
                "@weftui/core",
                "@weftui/router"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 10
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "3 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 3,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 10 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 10
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "22 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 22
                    }
                  }
                ],
                "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": 75,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "24 out of 24 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "effect-ts-community-nl",
                "effect",
                "typescript"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "3 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "weak",
        "name": "Security",
        "value": 40,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "weak",
            "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": 41,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.1
            },
            "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": "24 out of 24 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 0/16 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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "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 12 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": "16 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "weak",
            "name": "Dependency advisories",
            "note": "Matched the npm:website@0.1.1 runtime dependency closure — what installing the published package pulls in — 40 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:website@0.1.1",
                  "assessed": 40
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 36,
            "inputs": {
              "source": "osv",
              "advisories": 18,
              "affected_packages": 9,
              "assessed_packages": 40,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1, high 6, moderate 2",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: request 2.20.0 (moderate 6.1)",
                "points": 17.9,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "request 2.20.0 (moderate 6.1)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "8 affected: underscore 1.4.4 (critical 9.8), form-data 0.0.10 (high 7.5), hawk 0.10.2 (high 7.5), +5 more",
                "points": 2.4,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 8,
                      "packages": "underscore 1.4.4 (critical 9.8), form-data 0.0.10 (high 7.5), hawk 0.10.2 (high 7.5)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "9 advisory-carrying package(s) unaddressed past 90 days; oldest published 3205 days ago",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 9,
                      "oldest": 3205
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "exceptional",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 40,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "exceptional",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 71,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 16995
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "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": "87 of 87 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 87,
                      "sampled": 87
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "examples/async-data-loading/tsconfig.json",
                "examples/declarative-event-handlers/tsconfig.json",
                "examples/effect-atom/tsconfig.json",
                "examples/element-ref/tsconfig.json",
                "examples/error-boundary/tsconfig.json",
                "examples/form-handling/tsconfig.json",
                "examples/headless-menu/tsconfig.json",
                "examples/keyed-list/tsconfig.json",
                "examples/list-rendering/tsconfig.json",
                "examples/reactive-styles/tsconfig.json",
                "examples/router-client/tsconfig.json",
                "examples/router-ssr/tsconfig.json",
                "examples/server-boundary/tsconfig.json",
                "examples/shared-state-islands/tsconfig.json",
                "examples/ssr-hydration/tsconfig.json",
                "examples/subscription-ref/tsconfig.json",
                "examples/suspense/tsconfig.json",
                "examples/type-augmentation/tsconfig.json",
                "packages/core/tsconfig.json",
                "packages/dom/tsconfig.json",
                "packages/router/tsconfig.json",
                "packages/vite/tsconfig.json",
                "website/tsconfig.json"
              ],
              "agent_commit_share": 0.7,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.13
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "examples/async-data-loading/tsconfig.json, examples/declarative-event-handlers/tsconfig.json, examples/effect-atom/tsconfig.json, examples/element-ref/tsconfig.json, examples/error-boundary/tsconfig.json, examples/form-handling/tsconfig.json, examples/headless-menu/tsconfig.json, examples/keyed-list/tsconfig.json, examples/list-rendering/tsconfig.json, examples/reactive-styles/tsconfig.json, examples/router-client/tsconfig.json, examples/router-ssr/tsconfig.json, examples/server-boundary/tsconfig.json, examples/shared-state-islands/tsconfig.json, examples/ssr-hydration/tsconfig.json, examples/subscription-ref/tsconfig.json, examples/suspense/tsconfig.json, examples/type-augmentation/tsconfig.json, packages/core/tsconfig.json, packages/dom/tsconfig.json, packages/router/tsconfig.json, packages/vite/tsconfig.json, website/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples/async-data-loading/tsconfig.json, examples/declarative-event-handlers/tsconfig.json, examples/effect-atom/tsconfig.json, examples/element-ref/tsconfig.json, examples/error-boundary/tsconfig.json, examples/form-handling/tsconfig.json, examples/headless-menu/tsconfig.json, examples/keyed-list/tsconfig.json, examples/list-rendering/tsconfig.json, examples/reactive-styles/tsconfig.json, examples/router-client/tsconfig.json, examples/router-ssr/tsconfig.json, examples/server-boundary/tsconfig.json, examples/shared-state-islands/tsconfig.json, examples/ssr-hydration/tsconfig.json, examples/subscription-ref/tsconfig.json, examples/suspense/tsconfig.json, examples/type-augmentation/tsconfig.json, packages/core/tsconfig.json, packages/dom/tsconfig.json, packages/router/tsconfig.json, packages/vite/tsconfig.json, website/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "70 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 70,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "13 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 13,
                      "sampled": 100
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 314907,
              "source_files_sampled": 266,
              "oversized_source_files": 3
            },
            "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": "3/266 source files over 60KB",
                "points": 54.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 266,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "weak",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "demos",
                "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": "demos, examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "demos, examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "top": [
        "library"
      ],
      "labels": [
        "library"
      ],
      "scores": {
        "library": 8.6
      },
      "primary": "library",
      "evidence": [
        {
          "tier": "declared",
          "label": "library",
          "source": "npm.private",
          "weight": -6
        },
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:npm",
          "weight": 6
        },
        {
          "tier": "declared",
          "label": "library",
          "source": "npm.entry",
          "weight": 4.8
        },
        {
          "tier": "description",
          "label": "library",
          "source": "description:library",
          "weight": 2
        },
        {
          "tier": "declared",
          "label": "library",
          "source": "npm.peer_dependencies",
          "weight": 1.8
        }
      ],
      "artifacts": [
        {
          "path": "package.json",
          "labels": [],
          "ecosystem": "npm"
        },
        {
          "path": "packages/core/package.json",
          "labels": [
            "library"
          ],
          "ecosystem": "npm"
        },
        {
          "path": "packages/dom/package.json",
          "labels": [
            "library"
          ],
          "ecosystem": "npm"
        },
        {
          "path": "packages/router/package.json",
          "labels": [
            "library"
          ],
          "ecosystem": "npm"
        },
        {
          "path": "packages/vite/package.json",
          "labels": [
            "library"
          ],
          "ecosystem": "npm"
        }
      ],
      "confidence": "high",
      "host_extension": false,
      "runs_as_process": false,
      "consumed_by_code": true
    },
    "metrics_version": "2.5.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "npm package 'website' points at a different repository (https://github.com/akoenig/node-website); excluded from ecosystem scoring",
    "Could not fetch npm package '@weftui/vite' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-08-04T07:49:41.718858Z",
  "schema_version": "0.30.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/stefvw93/weft.svg",
  "full_name": "stefvw93/weft",
  "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 v2.5.0, Schema v0.30.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.