Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 18:14 UTC

e0ipso / strikethroo

Task management for AI coding assistants

JavaScript · TypeScriptMIT★ 43 Sterne⑂ 3 Forksseit Sept. 2025Auf GitHub ansehen ↗

e0ipso/strikethroo erreicht einen Gesundheitsindex von 69 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (93/100) ab, am schwächsten bei Community & Adoption (43/100). Zuletzt vor 5 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

69
gesamt / 100
Mittel

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

Mateu Aguiló BoschPersönliches Konto
156 Follower109 öffentliche Reposseit Okt. 2011Lullabot

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
npmstrikethroo3.14.32.10924vor 5 Tagenclitask-managementainpxtypescript

Metriken nach Kategorie

Vitalität

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

93Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 5 Tagen
23.5/36Commit-Rhythmus — 34/52 Wochen mit Commits
18/18Commit-Volumen — 629 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year629
human_commit_share1
days_since_last_push5
active_weeks_last_year34

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 1 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count100
latest_release_tagv3.14.3
releases_from_tagsnein
days_since_latest_release5
mean_days_between_releases1
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?

43Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
26.3/60Stars — 43 Stars
2.5/25Forks — 3 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks3
stars43
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
44.3/80Downloads pro Monat — 2.109 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesstrikethroo
dependents
ecosystemsnpm
total_downloads
monthly_downloads2.109
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?

64Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
6/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 73 % der Commits
5.4/13.5Breite der Beitragenden — 4 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 9 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled4
top_contributor_share0,734
Wie die Bewertung erfolgt
37.1/46.8Issue-Lösungsquote — 79 % der Issues geschlossen
38.2/38.3PR-Annahme — 35/35 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs35
open_issues6
closed_issues23
issue_closed_ratio0,793
closed_unmerged_prs0
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
15.8/25Reichweite des Inhabers — 156 Follower von e0ipso
25/25Kontohistorie — 109 öffentliche Repos, Kontoalter ca. 14 Jahre
Verwendete Eingangsdaten
followers156
owner_typeUser
is_verified
owner_logine0ipso
public_repos109
account_age_days5.389
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

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

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

85Exzellent · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 3 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .eslintrc.js, eslint.config.mjs
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 11 out of 12 merged PRs checked by a CI test -- score normalized to 9
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://strikethroo.canpicasoft.com
10/10Repository-Beschreibung
10/10Topics — 8 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsagents, ai, claude-code, code-generation, codex, coding-assistant, gemini-cli, opencode
has_wikinein
homepagehttps://strikethroo.canpicasoft.com
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

51Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.2/2.5CI-Tests — 11 out of 12 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 9 contributing companies or organizations
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 22 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 65 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

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

73Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 99 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,99
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes28.853
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .eslintrc.js, eslint.config.mjs
11/11Statische Typprüfung — tsconfig.json
10/10Reproduzierbare Umgebung — devcontainer, lockfile
2/10Belegte Agentenpraxis — 1 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
5/8Automatisierte Wartung — Abhängigkeits-Automatisierung konfiguriert, in den erfassten Commits nicht beobachtet
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainerja
has_linter_configja
typecheck_configstsconfig.json
agent_commit_share0,01
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — JavaScript mit Typprüfungs-Konfiguration (tsconfig.json)
53.4/55Handhabbare Dateigrößen — 5/168 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJavaScript
largest_source_bytes242.435
source_files_sampled168
oversized_source_files5

Eckdaten

43GitHub-Sterne
4Mitwirkende
629Commits, letzte 12 Monate
5Tage seit letztem Push
100Releases
1Bus-Faktor
6offene Issues
npm, RubyGemsPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:strikethroo@3.14.3; advisories assessed against the repository dependency graph instead

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 3 ⇿
0Sterne
3Forks
25Releases

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

12233312026-032026-052026-07
Major 1Minor 16Patch 8
OpenSSF Scorecard 5.1 / 10
5.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-07-22 18:14 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
9CI-Tests11 out of 12 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 9 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
0SASTSAST tool is not run on all commits -- score normalized to 0
4Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities65 existing vulnerabilities detected
Direkte Abhängigkeiten 6
RegistryPaketVersionsvorgabeManifest
npmchalk^5.6.0package.json
npmcommander^11.1.0package.json
npmdiff^5.2.0package.json
npmfs-extra^11.3.1package.json
npmgray-matter^4.0.3package.json
npminquirer^9.3.8package.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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "agents",
        "ai",
        "claude-code",
        "code-generation",
        "codex",
        "coding-assistant",
        "gemini-cli",
        "opencode"
      ],
      "is_fork": false,
      "size_kb": 50278,
      "has_wiki": false,
      "homepage": "https://strikethroo.canpicasoft.com",
      "languages": {
        "HTML": 1278,
        "Shell": 2654,
        "JavaScript": 1201444,
        "TypeScript": 751581
      },
      "pushed_at": "2026-07-17T14:24:10Z",
      "created_at": "2025-09-02T08:25:45Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T13:40:08Z",
      "description": "Task management for AI coding assistants",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "http://about.me/e0ipso",
      "name": "Mateu Aguiló Bosch",
      "type": "User",
      "login": "e0ipso",
      "company": "Lullabot",
      "location": "Ca'n Picafort, Mallorca, Spain",
      "followers": 156,
      "avatar_url": "https://avatars.githubusercontent.com/u/1140906?v=4",
      "created_at": "2011-10-20T14:27:43Z",
      "is_verified": null,
      "public_repos": 109,
      "account_age_days": 5389
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v3.14.3",
          "kind": "patch",
          "published_at": "2026-07-17T13:39:42Z"
        },
        {
          "tag": "v3.14.2",
          "kind": "patch",
          "published_at": "2026-07-17T11:22:00Z"
        },
        {
          "tag": "v3.14.1",
          "kind": "patch",
          "published_at": "2026-07-17T11:19:58Z"
        },
        {
          "tag": "v3.14.0",
          "kind": "minor",
          "published_at": "2026-07-14T22:18:24Z"
        },
        {
          "tag": "v3.13.0",
          "kind": "minor",
          "published_at": "2026-07-14T16:28:08Z"
        },
        {
          "tag": "v3.12.0",
          "kind": "minor",
          "published_at": "2026-07-12T21:27:25Z"
        },
        {
          "tag": "v3.11.0",
          "kind": "minor",
          "published_at": "2026-07-12T20:20:01Z"
        },
        {
          "tag": "v3.10.0",
          "kind": "minor",
          "published_at": "2026-07-11T22:32:48Z"
        },
        {
          "tag": "v3.9.0",
          "kind": "minor",
          "published_at": "2026-07-08T16:43:39Z"
        },
        {
          "tag": "v3.8.0",
          "kind": "minor",
          "published_at": "2026-07-08T06:43:07Z"
        },
        {
          "tag": "v3.7.0",
          "kind": "minor",
          "published_at": "2026-07-03T13:47:07Z"
        },
        {
          "tag": "v3.6.1",
          "kind": "patch",
          "published_at": "2026-06-29T12:18:57Z"
        },
        {
          "tag": "v3.6.0",
          "kind": "minor",
          "published_at": "2026-06-22T04:55:08Z"
        },
        {
          "tag": "v3.5.0",
          "kind": "minor",
          "published_at": "2026-06-21T15:38:17Z"
        },
        {
          "tag": "v3.4.2",
          "kind": "patch",
          "published_at": "2026-06-17T15:23:08Z"
        },
        {
          "tag": "v3.4.1",
          "kind": "patch",
          "published_at": "2026-06-17T14:42:17Z"
        },
        {
          "tag": "v3.4.0",
          "kind": "minor",
          "published_at": "2026-06-03T07:40:23Z"
        },
        {
          "tag": "v3.3.1",
          "kind": "patch",
          "published_at": "2026-06-02T19:27:11Z"
        },
        {
          "tag": "v3.3.0",
          "kind": "minor",
          "published_at": "2026-06-02T13:46:17Z"
        },
        {
          "tag": "v3.2.0",
          "kind": "minor",
          "published_at": "2026-06-01T21:22:48Z"
        },
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2026-06-01T20:19:07Z"
        },
        {
          "tag": "v3.0.2",
          "kind": "patch",
          "published_at": "2026-05-28T21:15:22Z"
        },
        {
          "tag": "v3.0.1",
          "kind": "patch",
          "published_at": "2026-05-28T20:52:32Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2026-05-28T20:52:01Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2026-05-26T13:13:39Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2026-05-25T21:44:51Z"
        },
        {
          "tag": "v1.39.1",
          "kind": "patch",
          "published_at": "2026-05-25T19:51:30Z"
        },
        {
          "tag": "v1.39.0",
          "kind": "minor",
          "published_at": "2026-05-25T15:55:06Z"
        },
        {
          "tag": "v1.38.0",
          "kind": "minor",
          "published_at": "2026-05-25T15:41:06Z"
        },
        {
          "tag": "v1.37.0",
          "kind": "minor",
          "published_at": "2026-05-25T15:34:38Z"
        },
        {
          "tag": "v1.36.1",
          "kind": "patch",
          "published_at": "2026-05-13T21:59:24Z"
        },
        {
          "tag": "v1.36.0",
          "kind": "minor",
          "published_at": "2026-04-21T08:28:19Z"
        },
        {
          "tag": "v1.35.0",
          "kind": "minor",
          "published_at": "2026-04-15T20:20:02Z"
        },
        {
          "tag": "v1.34.0",
          "kind": "minor",
          "published_at": "2026-03-27T06:18:21Z"
        },
        {
          "tag": "v1.33.0",
          "kind": "minor",
          "published_at": "2026-03-26T10:29:32Z"
        },
        {
          "tag": "v1.32.0",
          "kind": "minor",
          "published_at": "2026-03-09T14:08:44Z"
        },
        {
          "tag": "v1.31.0",
          "kind": "minor",
          "published_at": "2026-03-09T09:16:45Z"
        },
        {
          "tag": "v1.30.1",
          "kind": "patch",
          "published_at": "2026-03-06T21:30:03Z"
        },
        {
          "tag": "v1.30.0",
          "kind": "minor",
          "published_at": "2026-03-06T18:21:55Z"
        },
        {
          "tag": "v1.29.0",
          "kind": "minor",
          "published_at": "2026-03-06T18:10:50Z"
        },
        {
          "tag": "v1.28.0",
          "kind": "minor",
          "published_at": "2026-03-06T15:55:36Z"
        },
        {
          "tag": "v1.27.2",
          "kind": "patch",
          "published_at": "2026-02-27T08:07:12Z"
        },
        {
          "tag": "v1.27.1",
          "kind": "patch",
          "published_at": "2026-02-27T07:51:46Z"
        },
        {
          "tag": "v1.27.0",
          "kind": "minor",
          "published_at": "2026-02-02T10:13:48Z"
        },
        {
          "tag": "v1.26.11",
          "kind": "patch",
          "published_at": "2026-01-30T16:04:30Z"
        },
        {
          "tag": "v1.26.10",
          "kind": "patch",
          "published_at": "2026-01-30T15:54:56Z"
        },
        {
          "tag": "v1.26.9",
          "kind": "patch",
          "published_at": "2026-01-26T10:16:42Z"
        },
        {
          "tag": "v1.26.8",
          "kind": "patch",
          "published_at": "2026-01-21T11:05:39Z"
        },
        {
          "tag": "v1.26.7",
          "kind": "patch",
          "published_at": "2026-01-21T06:40:34Z"
        },
        {
          "tag": "v1.26.6",
          "kind": "patch",
          "published_at": "2026-01-09T10:57:31Z"
        },
        {
          "tag": "v1.26.5",
          "kind": "patch",
          "published_at": "2026-01-09T10:40:16Z"
        },
        {
          "tag": "v1.26.4",
          "kind": "patch",
          "published_at": "2026-01-08T21:28:32Z"
        },
        {
          "tag": "v1.26.3",
          "kind": "patch",
          "published_at": "2026-01-06T07:07:00Z"
        },
        {
          "tag": "v1.26.2",
          "kind": "patch",
          "published_at": "2026-01-04T08:24:53Z"
        },
        {
          "tag": "v1.26.1",
          "kind": "patch",
          "published_at": "2026-01-03T06:15:59Z"
        },
        {
          "tag": "v1.26.0",
          "kind": "minor",
          "published_at": "2025-12-03T09:48:50Z"
        },
        {
          "tag": "v1.25.0",
          "kind": "minor",
          "published_at": "2025-12-01T10:04:21Z"
        },
        {
          "tag": "v1.24.0",
          "kind": "minor",
          "published_at": "2025-11-23T09:19:18Z"
        },
        {
          "tag": "v1.23.1",
          "kind": "patch",
          "published_at": "2025-11-23T07:41:24Z"
        },
        {
          "tag": "v1.23.0",
          "kind": "minor",
          "published_at": "2025-11-23T06:42:52Z"
        },
        {
          "tag": "v1.22.0",
          "kind": "minor",
          "published_at": "2025-11-22T18:13:41Z"
        },
        {
          "tag": "v1.21.0",
          "kind": "minor",
          "published_at": "2025-11-22T08:04:23Z"
        },
        {
          "tag": "v1.20.0",
          "kind": "minor",
          "published_at": "2025-11-05T10:08:13Z"
        },
        {
          "tag": "v1.19.0",
          "kind": "minor",
          "published_at": "2025-10-30T22:55:22Z"
        },
        {
          "tag": "v1.18.7",
          "kind": "patch",
          "published_at": "2025-10-28T12:10:28Z"
        },
        {
          "tag": "v1.18.6",
          "kind": "patch",
          "published_at": "2025-10-22T08:09:32Z"
        },
        {
          "tag": "v1.18.5",
          "kind": "patch",
          "published_at": "2025-10-20T05:55:34Z"
        },
        {
          "tag": "v1.18.4",
          "kind": "patch",
          "published_at": "2025-10-20T05:00:23Z"
        },
        {
          "tag": "v1.18.3",
          "kind": "patch",
          "published_at": "2025-10-17T21:15:29Z"
        },
        {
          "tag": "v1.18.2",
          "kind": "patch",
          "published_at": "2025-10-17T13:18:57Z"
        },
        {
          "tag": "v1.18.1",
          "kind": "patch",
          "published_at": "2025-10-17T09:41:47Z"
        },
        {
          "tag": "v1.18.0",
          "kind": "minor",
          "published_at": "2025-10-17T08:42:16Z"
        },
        {
          "tag": "v1.17.1",
          "kind": "patch",
          "published_at": "2025-10-17T08:17:05Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2025-10-16T23:02:35Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2025-10-16T22:33:56Z"
        },
        {
          "tag": "v1.15.0",
          "kind": "minor",
          "published_at": "2025-10-16T09:38:50Z"
        },
        {
          "tag": "v1.14.0",
          "kind": "minor",
          "published_at": "2025-10-16T08:16:25Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2025-10-09T10:47:02Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2025-10-09T05:48:28Z"
        },
        {
          "tag": "v1.11.1",
          "kind": "patch",
          "published_at": "2025-10-03T21:55:19Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2025-09-27T21:10:10Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2025-09-27T20:09:17Z"
        },
        {
          "tag": "v1.9.2",
          "kind": "patch",
          "published_at": "2025-09-26T14:58:23Z"
        },
        {
          "tag": "v1.9.1",
          "kind": "patch",
          "published_at": "2025-09-25T10:52:59Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2025-09-25T10:13:58Z"
        },
        {
          "tag": "v1.8.3",
          "kind": "patch",
          "published_at": "2025-09-23T11:30:58Z"
        },
        {
          "tag": "v1.8.2",
          "kind": "patch",
          "published_at": "2025-09-17T16:30:43Z"
        },
        {
          "tag": "v1.8.1",
          "kind": "patch",
          "published_at": "2025-09-15T10:23:21Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2025-09-15T09:43:46Z"
        },
        {
          "tag": "v1.7.1",
          "kind": "patch",
          "published_at": "2025-09-15T09:37:40Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2025-09-15T09:36:52Z"
        },
        {
          "tag": "v1.6.2",
          "kind": "patch",
          "published_at": "2025-09-15T09:34:52Z"
        },
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2025-09-15T09:31:23Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2025-09-10T10:28:51Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2025-09-08T11:12:58Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2025-09-08T10:22:23Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2025-09-08T08:55:03Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2025-09-06T07:12:22Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2025-09-04T07:44:33Z"
        },
        {
          "tag": "v1.1.4",
          "kind": "patch",
          "published_at": "2025-09-03T10:43:40Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "96cea9ed5045a8da35165c4ba0d875e8f12cd6df",
          "body": "## <small>3.14.3 (2026-07-17)</small>\n\n* fix: allow workspace-only branch creation (#65) ([543f5bd](https://github.com/e0ipso/strikethroo/commit/543f5bd)), closes [#65](https://github.com/e0ipso/strikethroo/issues/65) [#63](https://github.com/e0ipso/strikethroo/issues/63)",
          "is_bot": false,
          "headline": "chore(release): 3.14.3 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-17T13:39:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "543f5bd5c9e05445c5bc9e1f960360e98005dc44",
          "body": "## Summary\n\n- Allow `create-feature-branch` to proceed from `main` or `master` when\nevery staged, unstaged, or untracked change is confined to the\nrepository-root `.ai/strikethroo` workspace.\n- Preserve the hard safety gate for every change outside that workspace.\n- Fail closed when Git status inspe\n[…]\ne: **37 passed**\n\nGenerated CommonJS skill bundles were rebuilt and verified locally but\nare intentionally excluded from ordinary commits; the release workflow\nrebuilds and force-adds them.\n\nFixes #63",
          "is_bot": false,
          "headline": "fix: allow workspace-only branch creation (#65)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-17T13:37:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ab8d7715c527534da3d0ec97ed8a53f0876ac68c",
          "body": "## <small>3.14.2 (2026-07-17)</small>\n\n* fix: delete leftover files ([61bb1f9](https://github.com/e0ipso/strikethroo/commit/61bb1f9))",
          "is_bot": false,
          "headline": "chore(release): 3.14.2 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-17T11:21:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61bb1f9e06ab3db75315e8f0d18122b1ef805062",
          "body": null,
          "is_bot": false,
          "headline": "fix: delete leftover files",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-07-17T11:19:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a8c52739c4369e264dd9121e62749fec590ec02",
          "body": "## <small>3.14.1 (2026-07-17)</small>\n\n* fix: probe harness availability with default model (#64) ([1aa98a1](https://github.com/e0ipso/strikethroo/commit/1aa98a1)), closes [#64](https://github.com/e0ipso/strikethroo/issues/64) [#62](https://github.com/e0ipso/strikethroo/issues/62)\n* chore: update gitignore ([fbfdd99](https://github.com/e0ipso/strikethroo/commit/fbfdd99))",
          "is_bot": false,
          "headline": "chore(release): 3.14.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-17T11:19:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1aa98a1f75f3c751b7f91803942407247642035c",
          "body": "Availability probes hard-coded a pinned probe model per harness and\npassed it via --model. A retired pinned model marked a working,\nauthenticated harness unavailable, caching a false negative that made\nrouting avoid or fall back from an otherwise usable harness.\n\nRemove the model field from HarnessA\n[…]\ny probe command and\ncover each harness's exact non-interactive command. Docs state probes\nuse each harness's default model.\n\nFixes #62\n\nCo-authored-by: e0ipso <1140906+e0ipso@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: probe harness availability with default model (#64)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-17T11:18:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fbfdd99b4ffc83e9589f351c49329728f3a9182a",
          "body": null,
          "is_bot": false,
          "headline": "chore: update gitignore",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-07-14T22:20:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9658e5c2c48f47470d5960a6348df24ffafcec4",
          "body": "## 3.14.0 (2026-07-14)\n\n* feat: route targets at task dispatch (#59) ([72104d3](https://github.com/e0ipso/strikethroo/commit/72104d3)), closes [#59](https://github.com/e0ipso/strikethroo/issues/59) [#60](https://github.com/e0ipso/strikethroo/issues/60)",
          "is_bot": false,
          "headline": "chore(release): 3.14.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-14T22:17:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72104d3b3d07ef46014e539fce39c3a59ba50636",
          "body": "Persist execution profiles during generation.\n\nSelect exact targets at dispatch.\n\nAdd probes, caching, retries, and native fallback.\n\nAlign the UI, fixtures, skills, and docs.\n\nCloses #60\n\nCo-authored-by: e0ipso <1140906+e0ipso@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: route targets at task dispatch (#59)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-14T22:16:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e11020fb853353a23e2775fbfc75756653bd2f04",
          "body": "## 3.13.0 (2026-07-14)\n\n* feat: randomize available execution targets (#57) ([63b3677](https://github.com/e0ipso/strikethroo/commit/63b3677)), closes [#57](https://github.com/e0ipso/strikethroo/issues/57) [#58](https://github.com/e0ipso/strikethroo/issues/58)",
          "is_bot": false,
          "headline": "chore(release): 3.13.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-14T16:27:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63b367793cd2d01a78d584b587d3a12b680d239b",
          "body": "Filter external execution targets by installed harness CLI and choose\nuniformly among the available candidates. Preserve first-target fallback\nand custom resolver behavior.\n\nFix routing target field widths and attach generated devcontainers to a\nworkspace-specific Docker network.\n\nCloses #58\n\n---------\n\nCo-authored-by: e0ipso <1140906+e0ipso@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: randomize available execution targets (#57)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-14T16:26:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6296088e93e2747ec066f154df89cf448130ab38",
          "body": "## 3.12.0 (2026-07-12)\n\n* feat: automate task execution routing during generation (#55) ([4cfb813](https://github.com/e0ipso/strikethroo/commit/4cfb813)), closes [#55](https://github.com/e0ipso/strikethroo/issues/55) [#53-compatible](https://github.com/e0ipso/strikethroo/issues/53-compatible) [#53](https://github.com/e0ipso/strikethroo/issues/53)",
          "is_bot": false,
          "headline": "chore(release): 3.12.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-12T21:26:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cfb813833190d8c0654d8fc8bd90139061000a3",
          "body": "Task generation now classifies every generated task into a configured\nexecution profile and writes PR #53-compatible exact execution\nfrontmatter deterministically. Closes #54.\n\n- New workspace config config/execution-routing.yaml (ships disabled\n  with profiles: {}), copied and hash-tracked by init;\n[…]\n real claude binary on\n  the host PATH.\n- Docs (customization, workflow, glossary, AGENTS.md), Customize hook\n  description, serve/capture fixtures, and unit/integration/prompt/\n  init-tracking tests.",
          "is_bot": false,
          "headline": "feat: automate task execution routing during generation (#55)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-12T21:25:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e9b749e9a542427d40bcc6331ee052957de40e0c",
          "body": "## 3.11.0 (2026-07-12)\n\n* feat: introduce manifest-driven harness adapter registry (#56) ([08eb81c](https://github.com/e0ipso/strikethroo/commit/08eb81c)), closes [#56](https://github.com/e0ipso/strikethroo/issues/56) [#30](https://github.com/e0ipso/strikethroo/issues/30)",
          "is_bot": false,
          "headline": "chore(release): 3.11.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-12T20:19:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08eb81ca36f8313ade98ac7a42b58562ac8dc79b",
          "body": "Extract the per-harness init logic that lived inline in src/index.ts\ninto a\nsmall adapter registry under src/harnesses/. Each supported harness is\nnow a\nHarnessAdapter that declares how it is detected, installed, and updated,\nand\ninit iterates HarnessRegistry instead of branching over harnesses.\n\nBe\n[…]\nhe existing init\nintegration suite\npasses unmodified. detect() and update() are provided for interface\ncompleteness; init behavior is unchanged (detect is not wired into its\ncontrol\nflow).\n\nCloses #30",
          "is_bot": false,
          "headline": "feat: introduce manifest-driven harness adapter registry (#56)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-12T20:17:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0381fa0b8494ff4ebe9c2112114cdca2616bf981",
          "body": "## 3.10.0 (2026-07-11)\n\n* feat: add task execution overrides (#53) ([b1231fa](https://github.com/e0ipso/strikethroo/commit/b1231fa)), closes [#53](https://github.com/e0ipso/strikethroo/issues/53)",
          "is_bot": false,
          "headline": "chore(release): 3.10.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-11T22:32:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1231fa0b34c8f945dd7e376928594a4ec9bef6e",
          "body": "## Summary\n- replace the `github` harness identifier with `copilot` and generate\nCopilot custom agents at `.github/agents/*.md`\n- add task-only `execution` frontmatter parsing, including exact model\npass-through and lossless status rewriting\n- add a bundled external-dispatch runtime for Claude, Code\n[…]\nion\n- `npm run build`\n- `npm test` — 232 unit tests and 36 Playwright tests passed\n- Playwright also passed with `--workers=2`, used as the stable retry\nafter one default-worker CPU-contention timeout",
          "is_bot": false,
          "headline": "feat: add task execution overrides (#53)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-11T22:30:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d1a7d7c196fc93a29bdb24b9919fa1b3ddb80745",
          "body": "## 3.9.0 (2026-07-08)\n\n* feat: split skill scripts validation helpers (#48) ([9f619f4](https://github.com/e0ipso/strikethroo/commit/9f619f4)), closes [#48](https://github.com/e0ipso/strikethroo/issues/48) [#47](https://github.com/e0ipso/strikethroo/issues/47)\n* docs: update kenkeep docs ([1dfd261](https://github.com/e0ipso/strikethroo/commit/1dfd261))",
          "is_bot": false,
          "headline": "chore(release): 3.9.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-08T16:43:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f619f42e14e31fcfd9536f175e76d230e3feecb",
          "body": "Closes #47",
          "is_bot": false,
          "headline": "feat: split skill scripts validation helpers (#48)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-08T16:41:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dfd2615347b3bb4c136eb21cfa08d38ca83dfbe",
          "body": null,
          "is_bot": false,
          "headline": "docs: update kenkeep docs",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-07-08T15:14:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29b7056940f5c730cfb65ddd61b2351b00f62c5c",
          "body": "## 3.8.0 (2026-07-08)\n\n* feat: require complexity score in task documents (#46) ([1c58a84](https://github.com/e0ipso/strikethroo/commit/1c58a84)), closes [#46](https://github.com/e0ipso/strikethroo/issues/46)\n* docs: remove Pages CNAME artifact (#44) ([b3f9dcb](https://github.com/e0ipso/strikethroo/\n[…]\n/issues/43)\n* docs: update kenkeep ([44f69ef](https://github.com/e0ipso/strikethroo/commit/44f69ef))\n* chore: ignore devcontainer lock ([6035ecf](https://github.com/e0ipso/strikethroo/commit/6035ecf))",
          "is_bot": false,
          "headline": "chore(release): 3.8.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-08T06:42:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c58a845400d0324f47ae8513664feb27ecc5626",
          "body": null,
          "is_bot": false,
          "headline": "feat: require complexity score in task documents (#46)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-08T06:41:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44f69ef4174b4fc98d1591762ee8962672fa7d43",
          "body": null,
          "is_bot": false,
          "headline": "docs: update kenkeep",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-07-04T09:01:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3f9dcb4632a365b5c4b6750f582aab4c312d6ba",
          "body": "## Summary\n- remove docs/CNAME from the Actions-built Pages artifact\n- keep the custom subdomain managed by the repository Pages setting\n\n## Why\n- PR #43 merged the correct root-subdomain Jekyll config, but the Pages\ndeployment failed at actions/deploy-pages.\n- The failed artifact already has correc\n[…]\npicasoft.com/...\n- gh api repos/e0ipso/strikethroo/pages reports\ncname=strikethroo.canpicasoft.com and protected_domain_state=verified\n\nCo-authored-by: e0ipso <1140906+e0ipso@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: remove Pages CNAME artifact (#44)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-03T15:31:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6035ecf82b3f1cdb0a5a92c2efb5d1d25a6bb8cb",
          "body": null,
          "is_bot": false,
          "headline": "chore: ignore devcontainer lock",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-07-03T15:14:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f3f852382d2c08624a186752de265c88f25bed8",
          "body": "## Summary\n- set the Jekyll docs canonical URL to strikethroo.canpicasoft.com\n- make the docs site build at the subdomain root with an empty Jekyll\nbaseurl\n- add docs/CNAME for the GitHub Pages custom subdomain\n- update public documentation links and init output to the subdomain\n\n## Verification\n- n\n[…]\nso/strikethroo is configured with\ncname=strikethroo.canpicasoft.com.\n- e0ipso/e0ipso.github.io remains configured for mateuaguilo.com.\n\nCo-authored-by: e0ipso <1140906+e0ipso@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: update documentation domain (#43)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-03T15:11:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3afa1da04f2172585cf13dda8e06a22067751987",
          "body": "## 3.7.0 (2026-07-03)\n\n* feat(skills): add phase readiness check (#42) ([26175bb](https://github.com/e0ipso/strikethroo/commit/26175bb)), closes [#42](https://github.com/e0ipso/strikethroo/issues/42)\n* chore: update devcontainer for CLI compatibility ([454a5f7](https://github.com/e0ipso/strikethroo/commit/454a5f7))\n* docs: update kenkeep ([4292c94](https://github.com/e0ipso/strikethroo/commit/4292c94))",
          "is_bot": false,
          "headline": "chore(release): 3.7.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-03T13:46:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26175bb3007c74d0178fc1ecb088b8ce1602f11b",
          "body": "## Summary\n- add a bundled phase readiness check for blueprint execution\n- move dependency and clarification validation out of PRE_PHASE hooks\n- update docs, fixtures, hook descriptions, and kenkeep release guidance\n\n## Tests\n- npm test\n\n---------\n\nCo-authored-by: e0ipso <1140906+e0ipso@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(skills): add phase readiness check (#42)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-07-03T13:45:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "454a5f79692d170a7325a8e75775b891b52362d6",
          "body": null,
          "is_bot": false,
          "headline": "chore: update devcontainer for CLI compatibility",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-06-30T08:41:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4292c94586b6316d374ae87333369cf57bde9fa3",
          "body": null,
          "is_bot": false,
          "headline": "docs: update kenkeep",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-06-30T06:05:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "338bcd5061a502da7e4e08183ebdf9884ebf1e2c",
          "body": "## <small>3.6.1 (2026-06-29)</small>\n\n* fix: align package.json license with MIT LICENSE file ([fd3639d](https://github.com/e0ipso/strikethroo/commit/fd3639d))\n* ci: avoid sudo commands ([e324458](https://github.com/e0ipso/strikethroo/commit/e324458))\n* chore: allow autoupdate ([bb61d43](https://git\n[…]\n7956cb))\n* docs: add Cursor Cloud setup instructions to AGENTS.md (#41) ([65c24f0](https://github.com/e0ipso/strikethroo/commit/65c24f0)), closes [#41](https://github.com/e0ipso/strikethroo/issues/41)",
          "is_bot": false,
          "headline": "chore(release): 3.6.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-29T12:18:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd3639d7335ae19b5e9ff6eb587013b291d8f54f",
          "body": "Fix #26: npm metadata declared \"proprietary\" while LICENSE is MIT.\nUpdate package.json and package-lock.json to match README badge and LICENSE.",
          "is_bot": false,
          "headline": "fix: align package.json license with MIT LICENSE file",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-06-29T12:15:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e324458e8eae3a55f63a5eadd6263ff2b415900d",
          "body": null,
          "is_bot": false,
          "headline": "ci: avoid sudo commands",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-06-23T14:30:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb61d437369cb0e36a647e8cd267257134c40640",
          "body": null,
          "is_bot": false,
          "headline": "chore: allow autoupdate",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-06-23T14:21:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17956cb5d5abb3f00d8a7503c4099553a4e958fe",
          "body": null,
          "is_bot": false,
          "headline": "chore: simplify devcontainer",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-06-23T11:23:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65c24f01c6c422daf79e5c883b333743c3947de6",
          "body": "<!-- CURSOR_AGENT_PR_BODY_BEGIN -->\n## Summary\n\nDocuments the non-obvious setup/run details for developing this repo in\na Cursor Cloud Agent VM. The detail lives in a standalone\n**`.cursor/cloud-instructions.md`** and `AGENTS.md` carries a short\non-demand pointer (loaded only when relevant, not inli\n[…]\nalt=\"Open in Cursor\" width=\"131\" height=\"28\"\nsrc=\"https://cursor.com/assets/images/open-in-cursor-dark.png\"></picture></a>&nbsp;</div>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs: add Cursor Cloud setup instructions to AGENTS.md (#41)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-22T12:07:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3735a87172e21d33d14111fd3831e5fcd3375693",
          "body": "## 3.6.0 (2026-06-22)\n\n* feat(skills): execute prompt-correlation blueprint; move plan out of docs/ (#40) ([b53ba8f](https://github.com/e0ipso/strikethroo/commit/b53ba8f)), closes [#40](https://github.com/e0ipso/strikethroo/issues/40)",
          "is_bot": false,
          "headline": "chore(release): 3.6.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-22T04:54:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b53ba8f44d304470d8651344bb083d3cca1c803f",
          "body": "…docs/ (#40)\n\nImplement the skills/prompt correlation improvements as additive\nprompt/hook text, with shared enforcement files as required workspace\nshape.\n\n- Add `src/skill-prompts/AUTHORING.md` as the prompt-authoring house\nstyle guide and link it from README/AGENTS.\n- Add anti-rationalization, cl\n[…]\nugh the `pretest:e2e` npm lifecycle so\nPR validation can run browser e2e tests without a missing executable.\n\nValidation:\n\n- `npm run build`\n- `npm test` (`190/190` unit, `36/36` e2e)\n- `npm run lint`",
          "is_bot": false,
          "headline": "feat(skills): execute prompt-correlation blueprint; move plan out of …",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-22T04:53:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fcd95666f1b1212e72e139c6035b84359599a572",
          "body": "## 3.5.0 (2026-06-21)\n\n* docs: update Kenkeep ([2dc934f](https://github.com/e0ipso/strikethroo/commit/2dc934f))\n* docs(plan): add strikethroo prompt-improvement plan from skills-framework correlation (#39) ([82995a3](https://github.com/e0ipso/strikethroo/commit/82995a3)), closes [#39](https://github\n[…]\n99))\n* chore: improve devcontainer ([1220785](https://github.com/e0ipso/strikethroo/commit/1220785))\n* chore: update kenkeep workspace ([58ca988](https://github.com/e0ipso/strikethroo/commit/58ca988))",
          "is_bot": false,
          "headline": "chore(release): 3.5.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-21T15:37:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2dc934f67717e6835566b1e85969029851a19dfb",
          "body": null,
          "is_bot": false,
          "headline": "docs: update Kenkeep",
          "author_name": "e0ipso",
          "author_login": "e0ipso",
          "committed_at": "2026-06-21T15:36:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc93599384fc0005c3d109fc3a8180dfbb1e59d3",
          "body": "Ship Cursor-enabled settings with the t3 feature and seed from them when\nno host copy is mounted, so the devcontainer works without manual setup.",
          "is_bot": false,
          "headline": "feat(devcontainer): enable Cursor in t3 via bundled default settings",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-21T15:36:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58ca988743a3ac5c38512501283f4eaf5d6d92f8",
          "body": null,
          "is_bot": false,
          "headline": "chore: update kenkeep workspace",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-21T15:36:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1220785f97b8665bd9a162a33ca791bec9994320",
          "body": null,
          "is_bot": false,
          "headline": "chore: improve devcontainer",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-21T15:36:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82995a39b97d49e722925d66e9bfda354a06bba6",
          "body": "…work correlation (#39)\n\nInvestigate obra/superpowers, addyosmani/agent-skills, and Amp\n(ampcode.com),\nand translate the highest-leverage, principle-preserving\nprompt/skill-content\ntechniques into a Strikethroo plan: anti-rationalization tables, an\nevidence-based verification gate, a one-question-at\n[…]\ne,\ntrigger-only skill descriptions (SDO), and a prompt-authoring house\nstyle.\n\nThe plan conforms to PLAN_TEMPLATE.md and is placed under docs/plans/\nbecause\n.ai/strikethroo is gitignored in this repo.",
          "is_bot": false,
          "headline": "docs(plan): add strikethroo prompt-improvement plan from skills-frame…",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-21T12:06:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c60e058e5ed45abb5b2ce4cd0bec97956d7771da",
          "body": "## <small>3.4.2 (2026-06-17)</small>\n\n* fix: use composite plan name for task links (#33) ([fb71586](https://github.com/e0ipso/strikethroo/commit/fb71586)), closes [#33](https://github.com/e0ipso/strikethroo/issues/33)",
          "is_bot": false,
          "headline": "chore(release): 3.4.2 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-17T15:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb715863b8ed6f6f6e113dfced41484a5bd53066",
          "body": "The Tasks-tab swimlanes passed String(detail.id) as the planId,\nproducing task-detail URLs from the bare numeric id, which no longer\nresolve under the composite {id}--{slug} routing contract. Pass\ndetail.name so links address the canonical plan key.\n\nAdd unit coverage for taskNav and plans derive helpers, an e2e\nregression for zero-padded ids, and wire the new unit suites into\nvitest.config.",
          "is_bot": false,
          "headline": "fix: use composite plan name for task links (#33)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-17T15:09:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fee05fe224d4c456244cc179c7dd34503d592122",
          "body": "## <small>3.4.1 (2026-06-17)</small>\n\n* fix: cache self-review availability ([c7c65f5](https://github.com/e0ipso/strikethroo/commit/c7c65f5))\n* chore: improve devcontainer ([04f85c9](https://github.com/e0ipso/strikethroo/commit/04f85c9))\n* chore: upgrade to Kenkeep (#25) ([6e39138](https://github.co\n[…]\noo/commit/dadb183))\n* docs: update docs visuals ([ba99d4c](https://github.com/e0ipso/strikethroo/commit/ba99d4c))\n* ci: fix gha issues ([0c09844](https://github.com/e0ipso/strikethroo/commit/0c09844))",
          "is_bot": false,
          "headline": "chore(release): 3.4.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-17T14:41:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c7c65f54a436486173a3396deaffc42882d83961",
          "body": null,
          "is_bot": false,
          "headline": "fix: cache self-review availability",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-17T14:39:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04f85c9759f338f1c4b78dd5f62f83900878faeb",
          "body": null,
          "is_bot": false,
          "headline": "chore: improve devcontainer",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-17T14:36:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e39138cececac4d4c23e4fbbb9ff67f3f265845",
          "body": null,
          "is_bot": false,
          "headline": "chore: upgrade to Kenkeep (#25)",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-10T16:43:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13a4b1bd3ff8c484c54eda2fb328ef4d6320dac8",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T21:38:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e77516fd75da2907c0fc7fa3feac9d5872619eeb",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T21:24:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f97d5cf9c7423d7ca961b0df4fb073fa2fa08f96",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T21:23:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "224021a565e5173eeccf075721fb9a00e51e1208",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T21:20:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1eb94ecf7ac3b9f4d3a77d67d18bec65f841f514",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T20:18:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b94528d9f62cf8009acd30df39e7307fa38c284e",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T15:48:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86c5d56d18c76b74bb18d3a13b24839853b09891",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T14:09:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dadb1836f459b17ddd6e553abcc829bfb90c5bf7",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T14:06:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba99d4c904317188242be587d35a3303c2ee1b98",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-08T10:29:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da73fe40b42853c459558c9c75abdf6a0b12fcd2",
          "body": null,
          "is_bot": false,
          "headline": "docs: align logo",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T11:43:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74d4954ffea3def77913a18b9b7f7e206a71f1c2",
          "body": null,
          "is_bot": false,
          "headline": "docs: add screenshots to documentation",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T11:05:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a548121e693387b3c56a3c8108f318320f600aa7",
          "body": "Deep-link each hook name to its section in the customization guide.",
          "is_bot": false,
          "headline": "docs: note when lifecycle hooks run in the workflow guide",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T10:52:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f9892feb6bfbc47f05daffc370ef6873a2549d1",
          "body": null,
          "is_bot": false,
          "headline": "docs: fix version typo",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T10:45:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c0984445b821d87d2dd2d330dabd1de8d748b7b",
          "body": null,
          "is_bot": false,
          "headline": "ci: fix gha issues",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T09:41:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2431326ef8d7a6c2f2d04c0e7651cb6d867b38dc",
          "body": null,
          "is_bot": false,
          "headline": "docs: improve documentation site",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T09:23:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d374d74e375b8d96c1c9d216db1f665992f0d48e",
          "body": null,
          "is_bot": false,
          "headline": "docs: improve documentation site",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T09:15:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07a5d53ec62be4f71e9623b2f8daa85331c3f737",
          "body": null,
          "is_bot": false,
          "headline": "docs: improve documentation site",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T09:08:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c081724aefcf0dbc166237eaa2250523f192fd64",
          "body": "## 3.4.0 (2026-06-03)\n\n* docs: update doc site styles ([c730e14](https://github.com/e0ipso/strikethroo/commit/c730e14))\n* docs: update screenshots and recordings ([666c916](https://github.com/e0ipso/strikethroo/commit/666c916))\n* fix: make the wordmark correct again ([0765a08](https://github.com/e0i\n[…]\nmposite directory name ([2a93b92](https://github.com/e0ipso/strikethroo/commit/2a93b92))\n* refactor(web): drop Tasks tab view selector ([a4fe50b](https://github.com/e0ipso/strikethroo/commit/a4fe50b))",
          "is_bot": false,
          "headline": "chore(release): 3.4.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-03T07:39:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c730e14250a03b8af0c01d460392d4c23adac983",
          "body": null,
          "is_bot": false,
          "headline": "docs: update doc site styles",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T07:38:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0765a0861f4ae08c72275bdb474e925ca2bf27a8",
          "body": null,
          "is_bot": false,
          "headline": "fix: make the wordmark correct again",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T05:55:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c108d9582f720b8b6c1c9a89d2617acb4adfed43",
          "body": "# Conflicts:\n#\tdist-web/assets/arc-D7TGh2OG.js\n#\tdist-web/assets/architectureDiagram-3BPJPVTR-DXC4RNTr.js\n#\tdist-web/assets/blockDiagram-GPEHLZMM-BVdkKkev.js\n#\tdist-web/assets/c4Diagram-AAUBKEIU-Cg-y90jl.js\n#\tdist-web/assets/chunk-2J33WTMH-D-JGefPN.js\n#\tdist-web/assets/chunk-4BX2VUAB-0BK2g0H2.js\n#\td\n[…]\nam-CIIHVFJN-B2iX_aFJ.js\n#\tdist-web/assets/wardley-L42UT6IY-HtF3_dQK.js\n#\tdist-web/assets/wardleyDiagram-YWT4CUSO-Dv7BTISB.js\n#\tdist-web/assets/xychartDiagram-2RQKCTM6-BWkJ9p7T.js\n#\tdist-web/index.html",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T05:51:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e37cb1361cd0b642c9d4a942707206ea06a10b5b",
          "body": null,
          "is_bot": false,
          "headline": "chore: update the knowledge base",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T05:45:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "666c916c501f8a9dfd0fcf82d3239035300f28db",
          "body": null,
          "is_bot": false,
          "headline": "docs: update screenshots and recordings",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T05:22:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11e641608d5b99341b56942c76027713f6591433",
          "body": "The serve API and SPA routing now key plans on the composite\n{id}--{slug} name, but the capture harness still built detail URLs\nfrom the numeric plan id. The new route grammar rejects a bare id, so\nevery /api/plans/:id fetch failed, selectPlan returned null, and the\nPlan Detail stills and interaction videos were skipped.\n\nSwitch the API fetch, page navigations, and the openGraph/openTasks\nhelpers to the plan's composite name.",
          "is_bot": false,
          "headline": "fix(capture): use composite plan key in URLs",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-03T05:15:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a93b9298a5148cdab90933750ca75e52f744826",
          "body": "Route and resolve plans by the unique composite {id}--{slug} directory\nname instead of the collision-prone numeric id.\n\nServe: parsePlanId/parseArchivePlanId validate the segment against\n^[0-9]+--[a-z0-9-]+$ after one URL-decode; getPlanDetail/archivePlan\nresolve by exact match against the enumerate\n[…]\nvePlan address plans by name;\ntask :taskId and the numeric sort comparator are unchanged.\n\nTests and AGENTS.md updated to the composite-key contract, adding\nclean-break and traversal-payload coverage.",
          "is_bot": false,
          "headline": "feat(web): route plans by composite directory name",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T20:26:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a4fe50b4147c9040faa85dbd70fff3ae044fc51d",
          "body": "The Plan Detail Tasks tab now renders the Swimlanes view directly with\nno in-screen view selector. Swimlanes was already the default, and the\nOutline view was only reachable through the selector, so remove it:\ndelete ExecOutlineView and the now-dead execSummaryOf derivation (the\nExecution Summary it surfaced is still shown on the Results tab). Update\nthe e2e/capture suites and AGENTS.md to match.",
          "is_bot": false,
          "headline": "refactor(web): drop Tasks tab view selector",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T20:12:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf1fe7916ab995df11ea401716596170021aaa9e",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove dist assets from the repo",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T19:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9a1e8a9e71c829dc50f5e448a0e67a2a3c861f9",
          "body": "## <small>3.3.1 (2026-06-02)</small>\n\n* Merge remote-tracking branch 'origin/main' ([b809af1](https://github.com/e0ipso/strikethroo/commit/b809af1))\n* fix: dev server optimizations ([50cd0b9](https://github.com/e0ipso/strikethroo/commit/50cd0b9))\n* chore: add empty message ([91b6918](https://github.com/e0ipso/strikethroo/commit/91b6918))\n* refactor(web): utility-first Tailwind styling ([8b3b179](https://github.com/e0ipso/strikethroo/commit/8b3b179))",
          "is_bot": false,
          "headline": "chore(release): 3.3.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-02T19:26:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b809af1b591d26243134ca9052a88efe5cad2097",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T19:25:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50cd0b926b91bed80d8ea3d3984da52541d8bef3",
          "body": null,
          "is_bot": false,
          "headline": "fix: dev server optimizations",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T19:23:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91b69189fbf6233a3b825c4bf33ed53e93a3042a",
          "body": null,
          "is_bot": false,
          "headline": "chore: add empty message",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T19:23:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b3b17907f670e3692fad65a3b6a3e6bf639a6e1",
          "body": "Replace the vendored semantic-CSS layer with utility-first\nTailwind v4. Components emit default-scale + @theme token\nutilities; the 10 vendored component/screen CSS files are\nremoved, leaving fonts, the @theme tokens (with a .dark token\nswap), a minimal base reset, and a scoped mermaid block.\n\nBrand\n[…]\nevDependency only).\n\nThe e2e suite and capture harness are retargeted from removed\nclass names to role/text/aria/data-testid selectors; docs\nvisuals regenerated. npm test is green (178 unit + 37 e2e).",
          "is_bot": false,
          "headline": "refactor(web): utility-first Tailwind styling",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T16:54:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f23ec367fde75d2af684f8bcdac4cb15d0c4d560",
          "body": "## 3.3.0 (2026-06-02)\n\n* Merge remote-tracking branch 'origin/main' ([dc58000](https://github.com/e0ipso/strikethroo/commit/dc58000))\n* feat(capture): repeatable captures via fixture ([8f4f0a1](https://github.com/e0ipso/strikethroo/commit/8f4f0a1))\n* feat(web): drop view tabs from Archive screen ([9\n[…]\n, fix violations ([0a36468](https://github.com/e0ipso/strikethroo/commit/0a36468))\n* test(web): rewrite Customize e2e for the redesign ([72a3c84](https://github.com/e0ipso/strikethroo/commit/72a3c84))",
          "is_bot": false,
          "headline": "chore(release): 3.3.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-02T13:45:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dc58000e8dd03672e0d3518f49c30cdce6ade057",
          "body": "# Conflicts:\n#\tdist-web/assets/arc-CVtV5as-.js\n#\tdist-web/assets/architectureDiagram-3BPJPVTR-BYynksNB.js\n#\tdist-web/assets/blockDiagram-GPEHLZMM-Ct9Nu_pq.js\n#\tdist-web/assets/c4Diagram-AAUBKEIU-Dgzh7Ewq.js\n#\tdist-web/assets/chunk-2J33WTMH-BDyvxENl.js\n#\tdist-web/assets/chunk-4BX2VUAB-BhfZaKRN.js\n#\td\n[…]\nam-CIIHVFJN-BByKaCrp.js\n#\tdist-web/assets/wardley-L42UT6IY-mtvLR0Ck.js\n#\tdist-web/assets/wardleyDiagram-YWT4CUSO-DSGZD8JP.js\n#\tdist-web/assets/xychartDiagram-2RQKCTM6-BnMNxVn0.js\n#\tdist-web/index.html",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T13:40:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f4f0a1acae471982d5830c8c07e9a8bf6ec08ff",
          "body": "Drive the capture harness from a committed fixture workspace\n(src/capture/fixtures/capture-workspace: plans 102-104 plus a few\narchived plans and a full config/) instead of the gitignored, mutable\nlive .ai/strikethroo/ workspace, so npm run capture:web is deterministic\nand regenerable. Override with\n[…]\nshell, tasks-outline, archive-by-month, archive-date-range\nstills and the live-update-sse and archive-sort-and-filter videos; prune\ntheir files and update docs/web-app.md, AGENTS.md, and the captions.",
          "is_bot": false,
          "headline": "feat(capture): repeatable captures via fixture",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T11:23:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "776cbcbc9a3452d608a087aa00ecb657b8446ff7",
          "body": "Establish the serve web app as Strikethroo's visualization layer.\n\nAdd a reusable Playwright capture harness (npm run capture:web,\nsrc/capture/capture-web.ts) that serves the repo's own workspace via\nstartServer, drives a real Chromium against dist-web/, dynamically\nselects a representative plan, an\n[…]\n as narrative context. Expand the README\nserve section with a hi-res preview and a link to the new page, add\ncross-links from docs/index.md and docs/workflow.md, and document the\nharness in AGENTS.md.",
          "is_bot": false,
          "headline": "docs(web-app): add capture harness and visuals",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T10:37:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "677eec2fac971188085f2e86dbee856256fae35e",
          "body": null,
          "is_bot": false,
          "headline": "fix: minor improvements",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T09:19:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0019d03d936444a2a59a6ff10b7682e12eaf8ed",
          "body": "Run eslint --fix and prettier --write on staged files via the\npre-commit hook, replacing the unscoped npm run lint (npm test\nstill runs). Widen the lint and format scripts to cover tsx, and\nexclude vendored CSS and dist-web from prettier.",
          "is_bot": false,
          "headline": "build: add lint-staged for lint and format",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T09:01:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a364684cee75dcead25243343d13dfac62ebe08",
          "body": "Add shared browser globals to the test ESLint block (e2e\npage.evaluate callbacks use location/URL/document) and\n__APP_VERSION__ to the web SPA block, then clear the unused\nimports and dead helpers this surfaces across the suite.",
          "is_bot": false,
          "headline": "chore(lint): lint tsx and test files, fix violations",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T09:01:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e26114f54ca8b8ca888223a3088ee91ff5851d59",
          "body": null,
          "is_bot": false,
          "headline": "chore: fix formatting",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T08:56:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92b10a8d19e6fc6d983752b8674cf923a3f1c10c",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove dist assets from the repo",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T08:42:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72a3c844dde3ba503c1ba713538d72f4514f9917",
          "body": "Cover the new card-grid listing, the editor detail route, the save\nround-trip (against an isolated temp workspace fixture), and the\nnot-found state. Replaces the assertions for the removed read-only\nHooks/Templates views.",
          "is_bot": false,
          "headline": "test(web): rewrite Customize e2e for the redesign",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T08:41:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94cf101658b6201d3f7d6136b0bbcab7d7c3c06f",
          "body": "The Archive screen no longer has an All / By-month view switcher; the\nBy-month grouping is now the only view. The empty-archive and no-results\nstates move into the month-groups renderer and the flat-table view is\nremoved.",
          "is_bot": false,
          "headline": "feat(web): drop view tabs from Archive screen",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T08:40:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "233f39c1b456373f5831edf6d7701527e534a167",
          "body": "Surface the hosting project's identity in the sidebar footer. The serve\ncapabilities endpoint (GET /api/capabilities) now derives the project\nname and path from the workspace root (deriveProject) and returns them\nas an optional `project` field; the SPA types it as ProjectInfo and the\nSidebar footer renders the name.",
          "is_bot": false,
          "headline": "feat(web): show hosting project in sidebar footer",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T08:40:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46e8db58bd42b017871ea0296b7f697fd65e4426",
          "body": "Redesign the Customize section into the listing->detail pattern used\nelsewhere. Both Hooks and Templates tabs now render the same responsive\nCSS-grid of cards (ConfigCardGrid, 3->2->1 columns); each card shows the\nworkspace-relative path, the file id, and an optional description.\n\nDescriptions come \n[…]\ntion). getConfig now surfaces a\nworkspace-relative relPath. The legacy HooksView/TemplatesView and their\ninert actions are removed.\n\nCodeMirror and the YAML plugin are build-time devDependencies only.",
          "is_bot": false,
          "headline": "feat(web): editable Customize card grid + editor",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-02T08:39:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "de5af44d186ed4c4838fd3dd03ce93a71c0af01a",
          "body": "## 3.2.0 (2026-06-01)\n\n* feat(web): drop the List view from the Plans switcher ([bdb46a2](https://github.com/e0ipso/strikethroo/commit/bdb46a2))",
          "is_bot": false,
          "headline": "chore(release): 3.2.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-01T21:22:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdb46a2bbd33e5e79be3b582238893806957ef70",
          "body": "Reduce the Plans switcher to Board and Cards, removing the List tab and\nits now-orphaned PlansListView component. Board and Cards already provide\nnavigation, review, and archive controls (Cards renders done plans\ndirectly), so no functionality is lost. Repoint the row-navigation and\narchive e2e suites at the Cards grid and update AGENTS.md.",
          "is_bot": false,
          "headline": "feat(web): drop the List view from the Plans switcher",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-01T21:20:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5df0f3cdf3a4fd4c42b7c183229af0c989ebeb7e",
          "body": "## 3.1.0 (2026-06-01)\n\n* docs: document the archive action as serve's single mutation (plan 93 phase 4) ([04b3749](https://github.com/e0ipso/strikethroo/commit/04b3749))\n* docs: fix 1.x workspace paths in migration guide (#23) ([3e43a8c](https://github.com/e0ipso/strikethroo/commit/3e43a8c)), closes\n[…]\n npm files ([d3dd1f4](https://github.com/e0ipso/strikethroo/commit/d3dd1f4))\n* build(web): wire build:web into the npm run build chain ([374a213](https://github.com/e0ipso/strikethroo/commit/374a213))",
          "is_bot": false,
          "headline": "chore(release): 3.1.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-01T20:18:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3d18a6ed84a5ce664212db28ca4b2ffdb529dd98",
          "body": "Record reusing or starting a dev:serve instance on :4317 (rebuild\ndist-web for source changes, or dev:web HMR at :5173) to visually\ninspect the SPA, including the sandbox-isolation caveat.",
          "is_bot": false,
          "headline": "docs(kb): add dev:serve visual-debug practice node",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-01T20:11:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b82a94de52583fe88401721bc267c50edab5e74",
          "body": "Replace the Task Detail right rail with an inline .reader__meta row of\ngroup/skills/dependency items, letting the prose run full-width with no\nstranded column. Done state now reads as a struck-through, muted page\ntitle rather than a status pill, matching the blueprint rails.",
          "is_bot": false,
          "headline": "refactor(web): inline task meta into reader header",
          "author_name": "Mateu Aguiló Bosch",
          "author_login": "e0ipso",
          "committed_at": "2026-06-01T20:11:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 629,
      "latest_release_at": "2026-07-17T13:39:42Z",
      "latest_release_tag": "v3.14.3",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 34,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "strikethroo",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "cli",
            "task-management",
            "ai",
            "npx",
            "typescript"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/strikethroo",
          "is_deprecated": false,
          "latest_version": "3.14.3",
          "repository_url": "https://github.com/e0ipso/strikethroo",
          "versions_count": 24,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2109,
          "first_published_at": "2026-05-28T20:37:29.637000Z",
          "latest_published_at": "2026-07-17T13:39:41.495000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 3,
      "stars": 43,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-05-29",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 3
      },
      "star_history": null,
      "open_issues_and_prs": 7
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": true,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 242435,
      "source_files_sampled": 168,
      "oversized_source_files": 5,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 28853
    },
    "dependencies": {
      "manifests": [
        "docs/Gemfile",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm",
        "rubygems"
      ],
      "dependencies": [
        {
          "name": "chalk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.6.0"
        },
        {
          "name": "commander",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.1.0"
        },
        {
          "name": "diff",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.0"
        },
        {
          "name": "fs-extra",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.3.1"
        },
        {
          "name": "gray-matter",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.3"
        },
        {
          "name": "inquirer",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.3.8"
        }
      ],
      "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": 1,
        "merged_prs": 35,
        "open_issues": 6,
        "closed_ratio": 0.793,
        "closed_issues": 23,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "e0ipso",
          "commits": 462,
          "avatar_url": "https://avatars.githubusercontent.com/u/1140906?v=4"
        },
        {
          "type": "User",
          "login": "semantic-release-bot",
          "commits": 110,
          "avatar_url": "https://avatars.githubusercontent.com/u/32174276?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 56,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        },
        {
          "type": "User",
          "login": "m4olivei",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/191049?v=4"
        }
      ],
      "contributors_sampled": 4,
      "top_contributor_share": 0.734
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "docs.yml",
        "release.yml",
        "test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.js",
        "eslint.config.mjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "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": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 9,
            "reason": "11 out of 12 merged PRs checked by a CI test -- score normalized to 9",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 9 contributing companies or organizations",
            "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 22 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "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": 4,
            "reason": "security policy file 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": "65 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "96cea9ed5045a8da35165c4ba0d875e8f12cd6df",
        "ran_at": "2026-07-22T18:14:05Z",
        "aggregate_score": 5.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-17T13:39:18Z",
      "oldest_open_prs": [
        {
          "number": 50,
          "created_at": "2026-07-08T18:05:17Z",
          "last_comment_at": "2026-07-18T06:02:36Z",
          "last_comment_author": "e0ipso"
        }
      ],
      "last_merged_pr_at": "2026-07-17T13:37:42Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 27,
          "created_at": "2026-06-17T14:00:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 28,
          "created_at": "2026-06-17T14:00:28Z",
          "last_comment_at": "2026-06-29T13:31:07Z",
          "last_comment_author": "e0ipso"
        },
        {
          "number": 49,
          "created_at": "2026-07-08T17:10:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 51,
          "created_at": "2026-07-09T15:38:25Z",
          "last_comment_at": "2026-07-13T14:52:42Z",
          "last_comment_author": "revagomes"
        },
        {
          "number": 61,
          "created_at": "2026-07-15T11:48:14Z",
          "last_comment_at": "2026-07-15T21:57:14Z",
          "last_comment_author": "e0ipso"
        },
        {
          "number": 66,
          "created_at": "2026-07-22T06:11:41Z",
          "last_comment_at": "2026-07-22T15:27:47Z",
          "last_comment_author": "jdleonard"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/e0ipso/strikethroo",
    "host": "github.com",
    "name": "strikethroo",
    "owner": "e0ipso"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 69,
      "inputs": {
        "security": 51,
        "vitality": 93,
        "community": 43,
        "governance": 64,
        "engineering": 85
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 93,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "commits_last_year": 629,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 34
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "34/52 weeks with commits",
                "points": 23.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 34
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "629 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 629
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v3.14.3",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 5,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 5 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 43,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 29,
            "inputs": {
              "forks": 3,
              "stars": 43,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "43 stars",
                "points": 26.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 43
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "3 forks",
                "points": 2.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "packages": [
                "strikethroo"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2109
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,109 downloads/month across npm",
                "points": 44.3,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2109,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 64,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 30,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 4,
              "top_contributor_share": 0.734
            },
            "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 73% of commits",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 73
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "4 contributors",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 9 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "merged_prs": 35,
              "open_issues": 6,
              "closed_issues": 23,
              "issue_closed_ratio": 0.793,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "79% of issues closed",
                "points": 37.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 79
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "35/35 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 35,
                      "decided": 35
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 64,
            "inputs": {
              "followers": 156,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "e0ipso",
              "public_repos": 109,
              "account_age_days": 5389
            },
            "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": "156 followers of e0ipso",
                "points": 15.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 156,
                      "login": "e0ipso"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "109 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 109
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "strikethroo"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "24 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 85,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": ".eslintrc.js, eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.js, eslint.config.mjs"
                    }
                  }
                ],
                "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": "11 out of 12 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "agents",
                "ai",
                "claude-code",
                "code-generation",
                "codex",
                "coding-assistant",
                "gemini-cli",
                "opencode"
              ],
              "has_wiki": false,
              "homepage": "https://strikethroo.canpicasoft.com",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://strikethroo.canpicasoft.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "8 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 51,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.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 is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "11 out of 12 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "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/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 9 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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 22 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 0.5,
                "status": "partial",
                "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 detected",
                "points": 2,
                "status": "partial",
                "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": "65 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 4
            },
            "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": 73,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.99,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 28853
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, 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": "99 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 99,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": true,
              "has_linter_config": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".eslintrc.js, eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.js, eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "devcontainer, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "devcontainer, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 242435,
              "source_files_sampled": 168,
              "oversized_source_files": 5
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript with type-check config (tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "tsconfig.json",
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "5/168 source files over 60KB",
                "points": 53.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 168,
                      "oversized": 5
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:strikethroo@3.14.3; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T18:14:19.144322Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/e/e0ipso/strikethroo.svg",
  "full_name": "e0ipso/strikethroo",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.