Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 18:14 UTC

e0ipso / strikethroo

Task management for AI coding assistants

JavaScript · TypeScriptMIT★ 43 estrellas⑂ 3 forksdesde sept 2025Ver en GitHub ↗

e0ipso/strikethroo tiene un índice de salud de 69 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (93/100) y la más baja, Community & Adoption (43/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

69
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

69
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Mateu Aguiló BoschCuenta personal
156 seguidores109 repositorios públicosdesde oct 2011Lullabot

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npmstrikethroo3.14.3210924hace 5 díasclitask-managementainpxtypescript

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

93Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
23.5/36Cadencia de commits — 34/52 semanas con commits
18/18Volumen de commits — 629 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year629
human_commit_share1
days_since_last_push5
active_weeks_last_year34
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~1 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count100
latest_release_tagv3.14.3
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases1
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

43En riesgo · 18% del índice global
Cómo se puntúa
26.3/60Estrellas — 43 estrellas
2.5/25Forks — 3 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks3
stars43
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
44.3/80Descargas mensuales — 2109 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesstrikethroo
dependents
ecosystemsnpm
total_downloads
monthly_downloads2109
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

64Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
6/22.5Distribución de commits — el principal contribuyente firma el 73% de los commits
5.4/13.5Amplitud de contribuyentes — 4 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 9 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled4
top_contributor_share0,734
Cómo se puntúa
37.1/46.8Resolución de issues — 79% de issues cerradas
38.2/38.3Aceptación de PR — 35/35 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs35
open_issues6
closed_issues23
issue_closed_ratio0,793
closed_unmerged_prs0
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
15.8/25Alcance del propietario — 156 seguidores de e0ipso
25/25Trayectoria — 109 repos públicos, cuenta de ~14 años
Datos de entrada utilizados
followers156
owner_typeUser
is_verified
owner_logine0ipso
public_repos109
account_age_days5389
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 24 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesstrikethroo
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

85Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 3 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .eslintrc.js, eslint.config.mjs
0/9.6Hooks de pre-commit
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 11 out of 12 merged PRs checked by a CI test -- score normalized to 9
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://strikethroo.canpicasoft.com
10/10Descripción del repositorio
10/10Topics — 8 topics
0/10Wiki
Datos de entrada utilizados
topicsagents, ai, claude-code, code-generation, codex, coding-assistant, gemini-cli, opencode
has_wikino
homepagehttps://strikethroo.canpicasoft.com
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

51Moderado · 16% del índice global
Cómo se puntúa
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.5Licencia — 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 — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 65 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,1
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

73Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 99 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,99
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes28.853
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .eslintrc.js, eslint.config.mjs
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — devcontainer, lockfile
2/10Práctica demostrada con agentes — 1 de los últimos 100 commits con autoría o crédito de agente
5/8Mantenimiento automatizado — automatización de dependencias configurada, no observada en los commits muestreados
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configstsconfig.json
agent_commit_share0,01
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — JavaScript con configuración de verificación de tipos (tsconfig.json)
53.4/55Tamaños de archivo manejables — 5/168 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJavaScript
largest_source_bytes242.435
source_files_sampled168
oversized_source_files5

Datos clave

43estrellas de GitHub
4contribuidores
629commits en los últimos 12 meses
5días desde el último push
100versiones publicadas
1factor bus
6issues abiertas
npm, RubyGemsecosistemas de paquetes

Advertencias de recopilación de datos

  • 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

Más detalle

Historial de estrellas y forks 0 ★ / 3 ⇿
0Estrellas
3Forks
25Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

12233312026-032026-052026-07
Mayor 1Menor 16Parche 8
OpenSSF Scorecard 5.1 / 10
5.1agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities65 existing vulnerabilities detected
Dependencias directas 6
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.26.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasnpm.