Registro público
Informe de salud del softwareesquema 0.23.0 · métricas 1.13.0 · 2026-07-21 21:30 UTC

ekusiek716 / ksk-design-system

KSK Design System — フリーランス向けマルチテーマ対応デザインシステム

TypeScriptMIT★ 1 estrella⑂ 0 forksdesde abr 2026Ver en GitHub ↗

ekusiek716/ksk-design-system tiene un índice de salud de 58 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (84/100) y la más baja, Community & Adoption (32/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

58
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.

58
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

keisuke okunoCuenta personal
1 seguidor4 repositorios públicosdesde jul 2015

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ón
npmksk-design-system1.45.0263516hace 4 días

Métricas por categoría

Vitalidad

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

84Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
9.7/36Cadencia de commits — 14/52 semanas con commits
18/18Volumen de commits — 314 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year314
human_commit_share1
days_since_last_push0
active_weeks_last_year14
Cómo se puntúa
27/27Publica versiones — 10 versiones publicadas
36/36Recencia de las versiones — última versión hace 4 días
27/27Cadencia de publicación — una versión cada ~10,6 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count10
latest_release_tagv1.45.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases10,6
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?

32En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 1 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
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
45.6/80Descargas mensuales — 2635 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesksk-design-system
dependents
ecosystemsnpm
total_downloads
monthly_downloads2635
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?

55Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.9/22.5Distribución de commits — el principal contribuyente firma el 96% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,959
Cómo se puntúa
46.2/46.8Resolución de issues — 99% de issues cerradas
37.5/38.3Aceptación de PR — 100/102 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs100
open_issues1
closed_issues82
issue_closed_ratio0,988
closed_unmerged_prs2
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
2.2/25Alcance del propietario — 1 seguidores de ekusiek716
17.1/25Trayectoria — 4 repos públicos, cuenta de ~11 años
Datos de entrada utilizados
followers1
owner_typeUser
is_verified
owner_loginekusiek716
public_repos4
account_age_days4015
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 4 días
20/20Historial de versiones — 16 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesksk-design-system
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

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

72Bueno · 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 — eslint.config.js
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

55Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://ksk-design-system.vercel.app
10/10Descripción del repositorio
0/10Topics
0/10Wiki
Datos de entrada utilizados
topics
has_wikino
homepagehttps://ksk-design-system.vercel.app
has_readme
has_docs_dirno
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?

39En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
2/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 24 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,9
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.

77Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md, templates/AGENTS.md, templates/CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 94 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,94
agent_instruction_filesAGENTS.md, CLAUDE.md, templates/AGENTS.md, templates/CLAUDE.md
agent_instruction_max_bytes11.339
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.js
11/11Verificación estática de tipos — examples/native-sandbox/tsconfig.json, mcp-server/tsconfig.json, tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 69 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
4/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsexamples/native-sandbox/tsconfig.json, mcp-server/tsconfig.json, tsconfig.json
agent_commit_share0,69
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.8/55Tamaños de archivo manejables — 2/507 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes251.465
source_files_sampled507
oversized_source_files2
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signal
api_schema_files

Datos clave

1estrellas de GitHub
2contribuidores
314commits en los últimos 12 meses
0días desde el último push
10versiones publicadas
1factor bus
1issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

  • Could not fetch npm package 'ksk-ds-mcp' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:ksk-design-system@1.45.0; advisories assessed against the repository dependency graph instead

Más detalle

OpenSSF Scorecard 3.9 / 10
3.9agregado

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-21 21:29 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
4Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 4
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities24 existing vulnerabilities detected
Dependencias directas 6
RegistroPaqueteRestricción de versiónManifiesto
npm@modelcontextprotocol/sdk^1.12.1mcp-server/package.json
npmclass-variance-authority^0.7.1package.json
npmclsx^2.1.1package.json
npmreact-day-picker^10.0.1package.json
npmreact-hook-form^7.75.0package.json
npmtailwind-merge^3.5.0package.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": [],
      "is_fork": false,
      "size_kb": 4585,
      "has_wiki": false,
      "homepage": "https://ksk-design-system.vercel.app",
      "languages": {
        "CSS": 89380,
        "MDX": 6366,
        "HTML": 369,
        "Shell": 69766,
        "JavaScript": 153976,
        "TypeScript": 2119700
      },
      "pushed_at": "2026-07-20T21:57:19Z",
      "created_at": "2026-04-09T16:43:18Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T21:57:24Z",
      "description": "KSK Design System — フリーランス向けマルチテーマ対応デザインシステム",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "keisuke okuno",
      "type": "User",
      "login": "ekusiek716",
      "company": null,
      "location": null,
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/13484104?v=4",
      "created_at": "2015-07-24T12:52:55Z",
      "is_verified": null,
      "public_repos": 4,
      "account_age_days": 4015
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.45.0",
          "kind": "minor",
          "published_at": "2026-07-17T03:59:14Z"
        },
        {
          "tag": "v1.44.0",
          "kind": "minor",
          "published_at": "2026-07-08T00:59:51Z"
        },
        {
          "tag": "v1.43.0",
          "kind": "minor",
          "published_at": "2026-07-07T02:29:08Z"
        },
        {
          "tag": "v1.42.2",
          "kind": "patch",
          "published_at": "2026-07-07T00:07:30Z"
        },
        {
          "tag": "v1.33.0",
          "kind": "minor",
          "published_at": "2026-06-16T14:13:34Z"
        },
        {
          "tag": "v1.32.0",
          "kind": "minor",
          "published_at": "2026-06-12T23:31:54Z"
        },
        {
          "tag": "v1.31.0",
          "kind": "minor",
          "published_at": "2026-06-12T11:46:45Z"
        },
        {
          "tag": "v1.30.5",
          "kind": "patch",
          "published_at": "2026-06-11T11:54:38Z"
        },
        {
          "tag": "v1.30.3",
          "kind": "patch",
          "published_at": "2026-06-11T06:54:51Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-04-12T23:14:38Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "fe72037e3ea83edc7fced6b0776edb18d2e69503",
          "body": null,
          "is_bot": false,
          "headline": "fix native control accessibility (#185)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-20T21:57:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdeb84e944ae2801071652cf29adad1d1c027ebb",
          "body": "Co-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add concurrency and paths-ignore to cut Actions usage (#184)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-20T21:29:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "68706c3d8e5aa659e854343aae120008722d6328",
          "body": "* feat: update-consumers.sh を全消費リポ16箇所・worktree方式・monorepo対応に拡張\n\nv1.45.0 配布で Examination 配下9リポと monorepo 2つ(aikoibito /\nokuno-todo-suite)が取り残され手動 bump になった問題への対応。\n\n- 既定対象を DEFAULT_REPOS(フルパス16箇所)に拡張\n- stash 方式を廃止し、origin/main からの一時 worktree 方式に統一\n  (ローカルの dirty 状態に一切触れない)\n- monorepo 対応: 追跡下の全 packag\n[…]\n Codex 第2ラウンド対応(INT/TERM で exit・cleanup 毎ループリセット・既存 remote branch は上書きせずスキップ)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: update-consumers.sh を全消費リポ16箇所・worktree方式・monorepo対応に拡張 (#183)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-17T05:04:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "86badb389ac387ab233e585dc7e67ba07df8968a",
          "body": "- feat(check-migration): サブコマンドを追加 (#174)\n- feat: semantic トークンの hex キャッシュ生成 + 契約テスト (#176)\n- feat: ドキュメント/コード乖離検出スクリプトを追加 (#177)\n- feat: 画面設計の型を契約化する screen-patterns.json / composition.json を追加 (#178)\n- docs(skill): 検証スキルに §4/§5 の知見を増補 (#179)\n- docs: 消費側向けアップデートガイド UPDATING.md を新設 (#180)\n- feat: Storybook横断視覚監査スキル audit-pages を新設 (#181)\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v1.45.0 (#182)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-17T03:58:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6d42a8f1de9bed7aff0f9216a67a3f6018ac76f8",
          "body": "* feat: Storybook横断視覚監査スキル audit-pages を新設\n\nChromatic等のnpm依存を追加せず、AIエージェント自身がブラウザ操作で\n全ストーリーを巡回・スクショ確認する運用でビジュアルリグレッションを代替する。\nksk-ds-verification-workflow(実装直後の差分検証)とは役割分担し、\n本スキルは既存ストーリー群の横断バッチ監査を担う。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* fix: audit-pages の実効性修正(stories 検査とダーク切替)\n\n[…]\nbal を追加(.dark クラス付与 + canvas 背景追随)し、\n  URL の globals=kskDark:dark で切り替える手順に修正\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Storybook横断視覚監査スキル audit-pages を新設 (#181)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-17T03:46:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ede594b764c60ab2cd1c4fe8d213af59e30a10cd",
          "body": "* docs: 消費側向けアップデートガイド UPDATING.md を新設\n\nnpm 依存として ksk-design-system を使うプロジェクト向けに、\nバージョンの読み方(patch/minor/major)・アップデート手順・\nしてよい/ダメな操作の早見表・トラブル対応をまとめた。\nRELEASE.md / PUBLISHING.md / MIGRATION.md / README.md から相互リンクし、\npackage.json#files と docs-drift の CANDIDATE_DOCS にも追加。\n\nCo-Authored-By: Claude Fable 5 \n[…]\nを明記\n- check-migration.mjs: 出力メッセージの存在しない codemod コマンド案内を\n  MIGRATION.md 参照へ修正\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: 消費側向けアップデートガイド UPDATING.md を新設 (#180)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-17T03:23:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e6180997dbd64bd917d47da557e882ddae20e97c",
          "body": "ksk 自身の未収載インシデント(pointer-events スキャン漏れの横展開・\nBottomSheetFrame/SideDrawerFrame の data-slot 上書き・border color\n横断点検)を §5 に追加し、再発防止スクリプト同時追加のプロンプト型を\n§4 に追加。cake-design-system 由来の truncate / hover-focus 系統統一の\n知見は ksk 側に対応する実例が見つからなかったため見送り。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(skill): 検証スキルに §4/§5 の知見を増補 (#179)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-17T03:13:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d1c2ed23ddc6c619c86bbaaf9126fb056ac6d67b",
          "body": "* feat: 画面設計の型を契約化する screen-patterns.json / composition.json を追加\n\nAI が画面実装前に「どのシェル/パターンを使い、どう組むか」を正本参照で\n決められるよう、contracts/screen-patterns.json(decisionTree・crudMatrix・\neditUiSelection)と contracts/composition.json(ページ骨格・余白リズム・\nカード/テキスト階層・CTA優先度)を新設。整合検証は\nscripts/check-screen-contracts.mjs(npm run che\n[…]\nlates/AGENTS.md に composition.json への参照を追加\n  (screen-patterns.json と対で読む旨を明記)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: 画面設計の型を契約化する screen-patterns.json / composition.json を追加 (#178)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-17T03:02:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cfaf7d72a50333d4e305034ccbc2f655e35aedea",
          "body": "* feat: ドキュメント/コード乖離検出スクリプトを追加\n\nCLAUDE.md 等の主要ドキュメントが参照するコンポーネント名・contracts/*.json・\nCSS変数名が実コードと一致しているかを検査する check-docs-drift.sh を追加し、\ncheck パイプラインに組み込む。初回実行で見つかった意図的な省略記法・placeholder\n例には <!-- docs-drift-ignore --> マーカーで例外化した。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* fix: check-doc\n[…]\nに区別可能)\n- pd() の小文字コネクタセグメントは検証の結果問題なし\n  (--Text-High-Emphasis が定義プールに入ることを確認)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: ドキュメント/コード乖離検出スクリプトを追加 (#177)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-17T02:39:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "66d17986ff1da6e1006cff52749b866b2110bd2f",
          "body": "* feat: semantic トークンの hex キャッシュ生成 + 契約テストを追加\n\ntokens.json の semantic/semanticDark はフラット文字列(var(--Primitive-*) 参照)で\n実 hex が読み取れず、primitive 値の変更が semantic の実色にどう波及するかを\n機械的に検出できなかった。tokens.json 本体のスキーマは変えず、サイドカーの\ncontracts/token-hex-cache.json に解決済み hex と skip 理由を出力し、\n--check でドリフトを検出できるようにする。check-co\n[…]\nrimitive.css の同 shade と一致」検証を追加(計 11 tests)。\ncache は現状 Brand == Blue のため内容不変。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: semantic トークンの hex キャッシュ生成 + 契約テスト (#176)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-17T00:47:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7412737061005bec173cb74ce4bec0546cae4b01",
          "body": "Add the pinned read-only caller for the shared Codex review receipt workflow.",
          "is_bot": false,
          "headline": "ci: add Codex review receipt (#175)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-16T23:55:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c36e7ebd6f68819669c0373c194114511f22e182",
          "body": "非推奨 API (eslint/deprecated.js の DEPRECATED) の残存を read-only で検査する\ncheck-migration サブコマンドを追加。DEPRECATED を named export 化して\ncodemod と共有し、正本を一本化した。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: check-migration サブコマンドを追加 (#174)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-16T23:50:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "184a0b052ba78804d23eec579614025ed0a85110",
          "body": "* fix: Dialog/Sheet の手動 body scroll-lock を除去しページ全体のスクロール不能を解消\n\nDialogContent / SheetContent は Radix の Presence とは別に「開閉に関係なく\n毎回レンダリングされる」関数コンポーネントであるため、その本体で呼んでいた\nuseBodyScrollLock が常時走り、Dialog / Sheet が閉じていても\ndocument.body.style.overflow = \"hidden\" を出しっぱなしにしていた。\n\nhtml の overflow が visible のとき viewpo\n[…]\n による回帰ガード付き)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YRZDzLFSgpP4HymJJk5Js2\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(glass): 宣言的適応マテリアル data-glass-backdrop / .glass-fg を追加 (#173)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-16T16:03:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1229dc6b9cebf38f3f035387ee3e33ee17deefa9",
          "body": ".glass-specular::after は 1px の conic リムに backdrop-filter: blur(4px) を\n効かせる装飾層で、適用域の限定を mask(exclude) に依存している。Blink は mask で\nbackdrop-filter のサンプリング域も 1px リングに限定するが、WebKit(Safari) は\nこれをクリップしない。::after は z-index:2 でコンテンツ(z1)より上にあるため、\nblur(4px) がシート全面に乗り前景テキスト(Liquid Glass シート内のボタン文字等)を\n潰していた(Chromium \n[…]\n base ::after が backdrop-filter を\n  持たず、Chromium ゲート内でのみ供給する契約を静的検証する回帰ガードを追加。\n\n\nClaude-Session: https://claude.ai/code/session_01YRZDzLFSgpP4HymJJk5Js2\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(glass): Safari で Liquid Glass シート内のテキストが全面ぼやける回帰を修正 (#172)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-13T18:48:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2af8c0c16dea1428dfe1385c2260b980ae0717dd",
          "body": "… (#171)\n\nBottomTabBar の選択カプセル(アイコン+ラベル内包)+ スライド morph + scroll edge effect + dark-media 適応 blur に加え、squircle 角(Sheet/Dialog/Card)・カーソル追従スペキュラ + .glass-interactive press・リム指向性 + 影の Apple 寄り調整を統合。マージ前の敵対的レビュー指摘 2 件(platter の consumer ref clobber / squircle 面での ::after rim ズレ)を修正済み。npm run check / npm test (191) / lint-scratch / prefix-order 通過。",
          "is_bot": false,
          "headline": "feat(glass): Liquid Glass を iOS 26 公式挙動へ + squircle/pointer追従/リム・影を統合…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-12T18:45:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4535f7e2977d34b5709a23584c9964df91ddcc47",
          "body": "DialogContent / SheetContent は Radix の Presence とは別に「開閉に関係なく\n毎回レンダリングされる」関数コンポーネントであるため、その本体で呼んでいた\nuseBodyScrollLock が常時走り、Dialog / Sheet が閉じていても\ndocument.body.style.overflow = \"hidden\" を出しっぱなしにしていた。\n\nhtml の overflow が visible のとき viewport スクロールは body の overflow に\n従う(CSS overflow propagation)ため、Dial\n[…]\ntest.ts: body.style.overflow の直接操作 /\n  useBodyScrollLock の再導入を静的に禁止する回帰ガードを追加。\n\n\nClaude-Session: https://claude.ai/code/session_01YRZDzLFSgpP4HymJJk5Js2\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Dialog/Sheet の手動 body scroll-lock を除去し Storybook のスクロール不能を解消 (#170)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-09T13:12:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "538d0ce1010e196b292c8afa3937f172a68a11fb",
          "body": "… (#169)\n\n.glass-specular は装飾専用レイヤーで backdrop-filter を設定しないため、\nlensing(エッジ屈折) は素材クラス(.glass 等)側の @supports から供給され、\n.glass.glass-specular でも保持される(併用が正しい意図)。実機(Chromium)で\ncomputed backdrop-filter が .glass 単体と一致し url(#glass-refract) を保つ\nことを確認済み。DS 側の挙動は変更していない(コメント + Story 追加のみ)。\n\n- glass.css: .glass-s\n[…]\nrefract) 再合成が必要) を追記\n- foundation-colors.stories: 回帰 Story GlassLensingWithSpecular を追加\n  (play で .glass.glass-specular が url() を保持することを assert)\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(glass): .glass-specular と lensing(#163) の併用意図を明文化 + 回帰ガード (#168)…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-09T00:14:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e7ad88389a9378c86777067321861dfdfba0ddf4",
          "body": "- feat(glass): Liquid Glass にエッジ屈折(lensing)を追加 (#163)\n- feat: web/native パリティ移植 — web に Prose/DocumentPage/SkeletonText、\n  native に CommitInput 系/ErrorBoundary/FormRoot 系/Toast 拡充 (#166)\n- fix(Sheet): 多段シートの overlay z-index 自動繰り上げ (#158)\n- fix(Sheet): swipeToClose 本文の高さキャップ (#164)\n- feat(BottomSheetFrame): mobile-page preset (#159)\n- fix(Tabs/PillToggle): pill トリガのヒット領域 44px 化 (#165)\n- feat(TabBar): data-tab-key アンカー出力 (#162)\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v1.44.0 (#167)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-08T00:59:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2eccd69f9d080f7a37cd5ca02c672b0cea1b4c02",
          "body": "* feat(glass): Liquid Glass にエッジ屈折(lensing)を追加\n\nSVG displacement filter を data URI で自己完結させ、Chromium のみ\n@supports (-webkit-app-region: none) ゲート越しに backdrop-filter へ\n合成する progressive enhancement。Safari/Firefox は従来の\nblur+saturate+brightness のまま安全に劣化する。\n\n- --glass-refract(ライト scale=65)/ --glass-refract\n[…]\nect 化 / ErrorBoundary 復帰ボタン / Toast palette・a11y / composition 二重 commit ガード)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: web/native パリティ移植 + open イシュー5件対応 (#166)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-08T00:38:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8f6402ae7b6860a14daf385298ccbe9f9b210e58",
          "body": "SVG displacement filter を data URI で自己完結させ、Chromium のみ\n@supports (-webkit-app-region: none) ゲート越しに backdrop-filter へ\n合成する progressive enhancement。Safari/Firefox は従来の\nblur+saturate+brightness のまま安全に劣化する。\n\n- --glass-refract(ライト scale=65)/ --glass-refract-dark(scale=36)\n- 対象: .glass / .glass-medium / .glass-strong / .glass-clear / .glass-accent\n- reduced-transparency フォールバックの詳細度を @supports 側と揃えて\n  屈折が残らないことを保証\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(glass): Liquid Glass にエッジ屈折(lensing)を追加 (#163)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T23:10:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "13e12fbda8d426d94b62dc5cc5421095e4d15205",
          "body": "DatePicker/DateRangePicker が内部 Calendar に defaultMonth を渡しておらず、\nvalue が未来/過去でも常に今月で開いていた。defaultMonth ?? value(?.from) を\nCalendar に渡し、defaultMonth?: Date prop で明示制御も可能にした。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(DatePicker): 選択値の月でカレンダーを開く / defaultMonth prop を追加 (#160) (#161)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T22:56:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b36d80e9dad7f2b17fc41cfcc68035199a507a57",
          "body": "- fix(CoachMark): a11y 隠しコピーへの button 複製を防ぎレイアウト崩れを解消 (#145)\n- feat: Bottom sheet のキーボード追従を DS 標準化(#149 :has(:focus) フォールバック / #150 lift/max-height)\n- feat: IME セーフな確定時コミット入力 CommitInput/CommitTextarea/CommitAutoGrowTextarea を追加 (#152)\n- feat(native): caption typo variant / Progress masked状態 / Prose+DocumentScreen を追加 (#146, #147, #148)\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v1.43.0 (#157)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T02:28:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5e30b025a360d4bd2de4115ced48d926bc8ed508",
          "body": "…ntScreen を追加 (#156)\n\n資格学習アプリ群(7リポ)のローカル実装を DS 化する native 3件を実装。\n\n- Text: variant=\"caption-strong\"(11px/font-semibold相当、既定色hint)を追加。\n  出典・著作権表示の text-[11px] font-semibold leading-4 text-hint マジックナンバーを撲滅。\n- Progress: masked prop を native/web 両方に追加。true 時はバー幅も色も\n  実 value に依存しない固定表示にし、ティザー表示での逆算漏洩を防ぐ。\n[…]\nion-strong / typography.prose-meta を追加し\ngenerate:tokens で src/tokens/native/* に反映。generate:native-lookup 実行済み。\n\nFixes #146\nFixes #147\nFixes #148\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(native): caption typo variant / Progress masked状態 / Prose+Docume…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T02:10:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "810070b8c5f7b8dbb7328c30c8179a0866021ed5",
          "body": "…area を追加 (#155)\n\nstore 直結の controlled input は IME 変換中に onChange が store へ書き込み、\nvalue 書き戻しで変換セッションが中断される(「1文字打つ毎に確定」)。\nbelle-todo で実証済みの local draft + composition ガードパターンを DS 化。\n\n- value + onCommit contract の 3 コンポーネント(Input/Textarea/AutoGrowTextarea ベース)\n- 共通ロジックは useCommitDraft フックに一本化(composition\n[…]\nosition 依存のため Web-only の intentional gap に登録\n- contracts/components.json(ui 58→61, total 133→136)/ index.ts / COMPONENT_LOOKUP.md 更新\n\nFixes #152\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: IME セーフな確定時コミット入力 CommitInput/CommitTextarea/CommitAutoGrowText…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T01:56:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "96a79eb586e71655eaa8acfdc4f11608363d644f",
          "body": "…focus) フォールバック) (#154)\n\n#150: SheetContent / BottomSheetFrame の bottom sheet に、仮想キーボード\n表示時の bottom lift + max-height 補正を DS 標準搭載。visualViewport 由来の\nJS 補正に加え、consumer が html[data-kb-open] + --kb-h を書けば同じ補正が\n効く CSS フォールバック(styles/sheet-keyboard.css)を preset へ同梱。snap\nモード(data-snap-active)は自前で高さ制御するため \n[…]\nht/snap 除外を data 属性駆動で実測、\n#149 の CSS ルール同梱・メディアクエリのモバイル幅ガードを確認。実キーボード\nの bottom lift と :has(:focus) の display 切替(要 window focus)は機械観測\n不能のため実機未確認。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Bottom sheet のキーボード追従を DS 標準化(#150 lift/max-height, #149 :has(:…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T01:55:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ad0ac2d1b4b69e991395e0ee64c18e7a11fca797",
          "body": "Radix Tooltip.Content は SR 向けに visually-hidden の span[role=\"tooltip\"]\nへ children を丸ごと複製する。CoachMark はここにインタラクティブな JSX\n(次へ/スキップ button)を渡していたため button が複製され、1px 幅の clip\n指定が漏れて width=1px/height 数百px の壊れた帯としてレイアウトに流出した\n(belle-todo で観測)。\n\nTooltip.Content に aria-label(content が文字列ならその文字列、\nそれ以外は \"コーチマーク\")\n[…]\nbutton も Arrow も複製されず、SR には\nrole=\"tooltip\" ノード経由の説明(aria-describedby で trigger と紐付く)が\n残る。API・data-slot・placement・hover 挙動・Storybook の見た目/操作性は不変。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(CoachMark): a11y 隠しコピーへの button 複製を防ぎレイアウト崩れを解消 (#145) (#153)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T01:46:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "13c38194c4505d2ddeef744823017e724333112d",
          "body": "…et-content\" を上書きして消すのを修正 (v1.42.2) (#144)\n\nフレーム識別は新設の data-frame 属性で行い、consumer の\n[data-slot=\"sheet-content\"] セレクタ(キーボード補正・closest() 等)が\nフレーム製シートにもマッチするようにする。jsdom 実レンダリングの\n回帰テストを追加。\n\nFixes #139\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: BottomSheetFrame/SideDrawerFrame が SheetContent の data-slot=\"she…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T00:06:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "60ec7b6dd6f078d4fd23f5057ad6bfc78adfb8fa",
          "body": "consumer の Tailwind v4 @source は minified dist をスキャンするため、\npointer-events-auto が DS 実装内にしか出現しないと拾い漏れが起き、\n親の pointer-events-none を子が上書きできずクリック不能になる\n(issue #132 / PR #134・#138 と同型。PR #141 でスコープ外として記録済み)。\n\nCelebration は全画面 overlay でクリック透過(pointer-events: none)が\n要件上必須のため、Calendar/Toast のような構造除去はできない。代わりに\n[…]\n overlay はアクション\nボタン・全画面 dismiss が自身にヒットし座標由来クリックで dismiss 動作、\n非 interactive overlay は画面隅クリックが背後へ貫通、inline style 由来の\ncomputed pointer-events を確認。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Celebration の pointer-events スキャン漏れ地雷を inline style 化で除去 (#143)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-07T00:03:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1b1a731c2362700f989699b3fb152e1543282457",
          "body": "Tailwind v4 では色を併記しない border が currentColor に落ち、消費側の\n濃色テキスト文脈で枠線が黒ずむ実害があった。CLAUDE.md の実装前セルフ\nチェックにも「border は色を併記」とあるが未対応箇所が残っていたため\n一掃する。\n\n- 色の保険なし違反(date-picker / time-picker / combobox / multi-select /\n  number-input / sub-nav / quick-action-grid / category-nav /\n  settings-section 等)に既存の正しい実装(Inpu\n[…]\nの既定色明示を追加し、\n  原則に揃える\n- 再発防止として scripts/check-border-color.mjs を追加し、\n  scripts/lint-scratch.sh 経由で npm run check に組み込み(package.json\n  自体は変更していない)\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: border ユーティリティに色指定を明示し currentColor 汚染を解消 (#142)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T23:54:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e50334b7a1674bcc377fc7b5a0ed5c72fd383a20",
          "body": "Calendar / Form / pointer-events 地雷の回帰防止テストを追加(jsdom 不使用・\nreact-dom/server SSR + 静的検査の既存方針を踏襲)。\n\n- __tests__/calendar-nav.test.tsx: Calendar nav が pointer-events オーバーレイ\n  (PR #134 で除去)を再導入しないこと、前月/次月ボタンの個別 absolute 配置と\n  aria-label「前の月へ」「次の月へ」・月キャプションが SSR 出力に存在すること\n- __tests__/pointer-events-mine.t\n[…]\nt の userEvent/expect。前月/次月クリックで月キャプションが\n  変わる interaction 回帰を担保)。COMPONENT_LOOKUP.md を再生成\n\nnpm test: 154 passed(既存 134 + 新規 20)/ npm run check 緑\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: Calendar nav / FormField バリデーションのテストと play function を追加 (#141)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T23:48:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "225d5153a56abfa5daecc42c66262dba76f998d3",
          "body": "rules.json 準拠チェック手順・scripts 使い分け・モデル分担・\n過去インシデント由来の判断基準を SKILL.md として構造化。\n判断ルール本体 (ksk-design-system スキル) の実行方法を担う補完スキル。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: 検証・レビュー実行ワークフロースキル (ksk-ds-verification-workflow) を追加 (#140)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T23:47:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2e7c26198e837fbf5822f26ae5afd7d7d037b128",
          "body": "* fix: Toast/MobileAppShell の pointer-events スキャン漏れ地雷を除去\n\nconsumer の Tailwind v4 @source は minified dist をスキャンするため、\n`pointer-events-auto` が DS 実装内にしか出現しないと拾い漏れが起き、\n親の `pointer-events-none` を子が上書きできず子がクリック不能になる\n(Calendar で実発生・PR #134 で修正済みと同一問題の残存)。\n\n- Toast: ToastViewport の `pointer-events-none` と t\n[…]\n自身にヒット / 座標由来 click で onClick 発火 / ラッパーは h=0 で\n周辺領域を遮らない(横 90px は MAIN にヒット)。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Toast/MobileAppShell の pointer-events スキャン漏れ地雷を除去 (#138)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T23:37:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "167e0cae5c174b378d4996ac0e9f6b062ddc8b37",
          "body": "- publish.yml: npm publish 成功後に git tag + GitHub Release を自動作成\n  (既存タグ/Release があれば skip、permissions.contents を write に変更)\n- README.md: コンポーネント数を実数に修正(125→133、RN exports 126→134)\n- contracts/components.json: meta.version を package.json (1.42.1) と同期\n- check-drift.sh: meta.version の乖離を検出するチェックを追加\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: リリース整合を修正(タグ自動化・README数値・contracts version) (#137)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T23:29:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0d1356a2500fe888e44278cf0c357f28a707819",
          "body": "deploy-storybook.yml は GitHub Pages 未有効化のため main push のたびに\nactions/configure-pages@v5 が失敗し続けていた(直近8 run 全滅)。\nStorybook は Vercel (https://ksk-design-system.vercel.app) で\n自動デプロイ済みのため冗長なworkflowを削除。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: GitHub Pages デプロイ workflow を削除 (#136)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T23:26:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "20670c326737f00f54ba712385c000798e105369",
          "body": "ローカル npm トークンへの依存を廃止。main への version 変更 push を契機に、\nnpm 上の最新版と比較して未公開なら GitHub Actions が OIDC で publish する。\nトークン失効による publish ブロック(#132 備考の状態)が構造的に起きなくなる。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: npm Trusted Publishing (OIDC) による自動 publish workflow を追加 (#135)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T23:12:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ccbf2ea4e36b50deeacf04051212d94ac29d6afb",
          "body": "… (v1.42.1) (#134)\n\nnav 全幅オーバーレイ + pointer-events-none / 子ボタン pointer-events-auto の構造は、\nconsumer の Tailwind v4 @source スキャンが minified dist から pointer-events-auto を\n拾えないと CSS ルールが生成されず、実クリックが背後要素に貫通して月移動が全滅する\n(belle-todo で実発生、回避は belle-todo#357)。\n\nnav を高さ 0 の配置基準に変え、各ボタンを left-1 / right-1 の absolute 配置にして\npointer-events ユーティリティへの依存を除去した。視覚位置は従来と同一。\n\nFixes #132\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Calendar nav の pointer-events オーバーレイを廃止し前月/次月ボタンを個別 absolute 配置に…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T22:45:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "52bdabe0a996975399c790baddb496202236e3be",
          "body": "- ds-judgment の独自部分(レビュー優先順位・severity/例外運用・増減時の同期チェーン)を ksk-design-system SKILL.md に統合し、ds-judgment を削除\n- AGENTS.md の必読リストにスキルを追加(Codex はスキル自動読込がないため明示参照)\n- AGENTS.md の禁止パターン件数(32→43)・コンポーネント数(112→132)の drift を修正\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: 判断スキルを ksk-design-system に統合し AGENTS.md から参照(Codex 対応) (#133)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T22:31:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "84da6db374abd93a5a1ddce3f376f0f84e22e19c",
          "body": "初見のコーディングエージェントがトークン設計・禁止パターン43件・\nHIG/M3基準を曖昧さなく適用できる判断Skill。frontmatter + body(約2.7kトークン)\n+ references/ 4ファイル(禁止rationale全43件・HIG×M3マッピング・トークン早見・\nコンポーネント判断樹)の3段構成。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: 設計判断Skill (.claude/skills/ksk-design-system) を追加 (#131)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T22:21:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5860b4832a269c24badaa70f873ec3d2dfa9c8d7",
          "body": "…n) (#130)\n\n- storybook / addon-a11y / addon-docs / react-vite / eslint-plugin-storybook を ^10.4.6 に\n- .storybook/preview.ts: backgrounds を options + initialGlobals 形式へ移行\n- button.stories.tsx: InverseOnDark の backgrounds 指定を globals 形式へ移行\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: Storybook を 10.4.6 に更新(backgrounds addon の新 API へ automigratio…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T22:15:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6b873f9d1f3c945a0a12d2ec78e28bd90b60655b",
          "body": "Co-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: UIコード生成・レビュー判断基準スキル ds-judgment を追加 (#129)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T22:11:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "39a501e73ae6b2900576414f5b5eb57f40018110",
          "body": "- SideDrawerFrame パターンを追加。SheetContent(side=right/left) の詳細ドロワー\n  外枠(全高・padding無し・flex縦・幅md)を1つの口でまとめ、consumer 側の\n  className 上書き(p-0 w-full max-w-md flex flex-col overflow-hidden)を撤去可能に。\n- SheetContent swipeToClose を side ドロワーに対応。right→右ドラッグ / left→左ドラッグ\n  で閉じ、縦優勢ジェスチャは本文スクロールに渡す。bottom sheet と同じ p\n[…]\nーはデスクトップ/web レイアウトのため intentional gap\n  (モバイルは BottomSheetFrame snap sheet を使う)。\n- 新規 pure ヘルパーの単体テスト追加、contracts/index/lookup 整合。\n\nCloses #127\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Sheet にサイド詳細ドロワー preset と side追従 swipe を追加 (v1.42.0) (#127) (#128)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T22:10:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "108418c6f32b526d4f032b04ffbf0ef475d211a5",
          "body": "- Sheet(swipeToClose): onPointerMove がコンテンツ全面に付いており、pointerdown を\n  伴わない素の mousemove (buttons===0) でも moveGesture が発火し、startYRef(初期0)\n  基準の dy でシートがカーソルに追従していた。マウスはボタン押下時のみ drag するよう\n  buttons===0 を早期 return。タッチ経路・実ドラッグ・close-drag は不変。\n- KebabMenu: アイコン付き項目が items-start + mt-0.5 固定で、説明なし単一行項目の\n  アイコン(星)が上にズレていた。description の有無で items-center / items-start を\n  出し分け、単一行はアイコンとラベルを垂直中央揃えに。\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: デスクトップでのシートのマウス追従とケバブ星アイコンのズレを修正 (v1.41.1) (#123)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T20:43:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b0b945aa17c10b10f3e31399e1cce3a3a8f1e0a8",
          "body": "…-metrics-ukn8fi\n\ndocs: npm ダウンロード数のバッジ+取得スクリプトを追加",
          "is_bot": false,
          "headline": "Merge pull request #122 from ekusiek716/claude/design-system-download…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-06T17:15:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "487c89bb8178d9e9f457b7a8b14b04bb3d3e6b41",
          "body": "- README: npm version / monthly / total download badges (shields.io) + ダウンロード数セクション\n- scripts/download-metrics.mjs: npm 公開統計 API から DL 数・推移・バージョン別内訳を整形表示(--json / --range 対応、到達不可時は exit 1 で graceful fail)\n- package.json: npm run metrics エイリアスを追加\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LY3S9UHswiY7u5NHvCs2Yg",
          "is_bot": false,
          "headline": "docs: add npm download metrics badges and reporting script",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-06T11:18:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2e716655a35144dedb9ed45783a9c4e453c73c9",
          "body": "…-j7fry0\n\ndocs: AGENTS.md に AIモデルの使い分け方針セクションを追加",
          "is_bot": false,
          "headline": "Merge pull request #121 from ekusiek716/claude/claude-md-model-policy…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-04T10:07:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46a2bca91614deacc820be898220fb49132cbb12",
          "body": "CLAUDE.md と内容を揃えるため、Codex 向けの AGENTS.md にも同一セクションを追記。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01N5fZq87HgAzH79zQdh1p8M",
          "is_bot": false,
          "headline": "docs: AGENTS.md に AIモデルの使い分け方針セクションを追加",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-04T09:35:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2faf0b5d48c35c5eca69a20f1f5d8537dcebb4d2",
          "body": "Claude-Session: https://claude.ai/code/session_01N5fZq87HgAzH79zQdh1p8M\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: CLAUDE.md に AIモデルの使い分け方針セクションを追加 (#120)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-04T09:22:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "98ac251d0462dc3e6d1f8e289de354747009cecd",
          "body": "feat(CountdownHero): dateLabel / todayValue prop を追加 (Issue #118)",
          "is_bot": false,
          "headline": "Merge pull request #119 from ekusiek716/feat/countdown-hero-date-label",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-03T08:17:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4cf9cd507d9c19a2f5c47fd42017d456bd1895e",
          "body": "belle-todo が CountdownSection を CountdownHero に移行した際に不足していた 2 点を追加:\n- dateLabel?: 数字の下に目標日そのもの (例 '2027.01.03 (日)') を表示。曜日/ロケール\n  フォーマットは消費側の責務 (DS はドメイン非依存を維持)。未指定なら日付行を出さない\n- todayValue?: 当日 (残り0日) に数字 '0' の代わりの文言 (例 '本日') を表示。単位は従来\n  どおり today では非表示\n\nいずれも後方互換 (未指定時は従来挙動)。stories に WithDateLabel /\n[…]\ncomponents.json の features に date-label-slot / today-value-override を追記、\nCOMPONENT_LOOKUP.md を再生成。tsc -b / eslint / vitest(130) 通過。\n\nCloses #118\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(CountdownHero): dateLabel / todayValue prop を追加 (Issue #118)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-03T08:13:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "356777c0e5d13c05d73c28ef6c91e370b35d32b0",
          "body": null,
          "is_bot": false,
          "headline": "1.41.0",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T13:00:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d67b376013d65d9debadda809e269fbaf0cff094",
          "body": "expo-blur は Android では experimentalBlurMethod を明示しない限り\n既定 'none'(半透明フィルのみ、実際のぼかしなし)になる仕様だった。\nGlassView の Tier2 (expo-blur fallback) で Android 時のみ\nexperimentalBlurMethod='dimezisBlurView' を渡し、RenderEffect/\nRenderScript ベースの本物のぼかしを有効化する。\n\n既知の注意点: react-native-screens の画面遷移中に描画が乱れる\nことがある(expo-blur 公式ドキュメントに記載の制約)。\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Android の GlassView が実際にぼかされていなかった問題を修正 (#117)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T12:35:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "12574a9aa755cf15ed5ba8b5a656236690fffc66",
          "body": "…abs (#116)\n\n自前の duck-typing だった NativeTabBarOptions 等が実際の\nBottomTabNavigationOptions/BottomTabBarProps と構造的に非互換で、\nconsumer 側で `as unknown as LiquidBottomTabBarProps` キャストが\n必要になっていた(tabBarLabel の関数シグネチャ不一致が主因)。\n\n@react-navigation/bottom-tabs の型を直接参照する形に書き換え、\nキャスト無しで実際の BottomTabBarProps を渡せるようにした。\nあわせて tabBarButton のシグネチャ不一致、存在しないフィールド名\ntabBarTestID(正: tabBarButtonTestID)も修正。\n\n@react-navigation/bottom-tabs は型のみ用途の optional peerDependency\nとして追加済み(実行時 import なし、native peerDependency 追加不要)。",
          "is_bot": false,
          "headline": "fix(native): align BottomTabBar types with @react-navigation/bottom-t…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T12:08:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc28c94ea810183dc53005b92b40438bdf747513",
          "body": "…Vite 8) (#115)\n\n* chore: react-day-picker 9→10(メジャー)\n\nCalendar の classNames snake_case API・components.Chevron は v10 でも\n互換。Single/Range 選択の動作を Storybook で確認済み。tsc/test 通過。\n\n* chore: ESLint 9→10 + globals 16→17(メジャー)\n\neslint 本体のエラーは0。eslint-plugin-react-hooks 7.1 で recommended に昇格した\n新ルール(set-state-in\n[…]\n須\nのセット。vitest 4.1 / @tailwindcss/vite 4.3 / Storybook 10.4 は Vite 8 対応済み。\nTS6 で必要になった tsconfig.lib.json の rootDir を明示追加(宣言出力の\ncommon source dir 推論エラー解消)。build:lib / build-storybook / check /\ntest 全通過。",
          "is_bot": false,
          "headline": "chore: メジャー依存アップデート(react-day-picker 10 / ESLint 10 / TypeScript 6 / …",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T11:44:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "049f1f9b585c2b6a54a0dc75f7fc649e7466a84e",
          "body": "chore: 依存パッケージをマイナー/パッチ範囲で最新化",
          "is_bot": false,
          "headline": "Merge pull request #114 from ekusiek716/chore/update-deps-minor",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T09:57:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48c76cf3770a028e4e3cfe5102bd24fa3a0ab13e",
          "body": "…g-tab-bar\n\nfeat: GradientSurface / FloatingTabBar(native)",
          "is_bot": false,
          "headline": "Merge pull request #113 from ekusiek716/feat/gradient-surface-floatin…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T09:57:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8fa891bef6158ebc1abbe8994725f3098e80b42",
          "body": "npm update で semver 範囲内の更新のみ反映(Storybook 10.4.6, Vite 7.3.6,\nReact 19.2.7, Tailwind CSS 4.3.2 等)。npm run check / npm run test 全通過、\n脆弱性 0 件。メジャーアップデート(ESLint 10, TypeScript 6, Vite 8,\nreact-day-picker 10 等)は破壊的変更を伴うため別途判断が必要、今回は含めない。",
          "is_bot": false,
          "headline": "chore: 依存パッケージをマイナー/パッチ範囲で最新化",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T09:50:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "401bceb7534815fc7fa75b900c5c266499eb3ba1",
          "body": "- GradientSurface: テーマの Brand ランプ(400→500→600)を既定 stops にする\n  ヒーロー用フルブリードグラデ。react-native-svg は optional peerDep で、\n  未導入環境ではコア色の単色フィルにフォールバック\n- FloatingTabBar: react-navigation 非依存の浮きピル型クイックナビ。\n  tone=hero(ビビッド面上の淡色ピル)/ surface の2トーン\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: GradientSurface / FloatingTabBar を native に追加",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T08:55:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6abe1d0356e01353d569e803996a488efb4904a6",
          "body": "feat: cobalt テーマ追加(鮮やかな深いコバルトブルー)",
          "is_bot": false,
          "headline": "Merge pull request #112 from ekusiek716/feat/cobalt-theme",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T07:10:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e807b73b3dd40c3a3fdf46ebc10a7570e17b3bc",
          "body": "ハードコードだと cobalt など新テーマが CTA コントラスト検証から漏れるため\n(CodeRabbit 指摘)。cobalt は 6.88:1 で AA 通過を確認。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: コントラスト検証のテーマ一覧を src/themes/ から動的導出",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T07:05:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "67335aaa0cd0ff7be7e9c383aff7401672f5a00a",
          "body": "package.json exports に ./themes/cobalt が無く消費側で @import を解決できなかったため追加。\nStorybook のテーマツールバーにも Cobalt (音楽・エンタメ) を登録。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: cobalt テーマの配布エクスポートと Storybook 切替を追加",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T06:57:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bbe72581cf655945ef1d7256a3470e8d4d1ae1ba",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: cobalt テーマ追加(鮮やかな深いコバルトブルー)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T06:51:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "94dc3de8b64bfc0d1b1ea2f620328284170837f8",
          "body": "iOS 26 実装アプリ(Shazam 等)の縁の繊細さを基準に、\n--glass-rim-width 1.5px→1px、ライトモード conic の opacity を約3割減\n(peak 0.80→0.55)、リングの増光 brightness(1.55)→(1.35) に調整。\n単色背景で縁取りが大袈裟に見える問題への対応。ダークモードは幅のみ細化。\nCOMPONENT_LOOKUP はボケ感デモストーリー追加分の再生成。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: glass のリムハイライトを細く控えめに調整",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T06:20:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "33662b4a01a896d5a965b720541223e4c30133db",
          "body": "glass の backdrop blur/saturate は静的背景では伝わらないため、\nカラフルなカード列を自動スクロールさせてボタン下を通過させるデモを Button に追加。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Glass のボケ感が分かる動く背景デモストーリーを追加",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T06:07:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "461dff6c834ec1d4760a243cc4701c9e1e55d67a",
          "body": "主要 CTA(次へ)は右、副次アクション(閉じる)は左。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: CelebrationDialog ストーリーの CTA 並び順を規約に合わせる (#111)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T06:03:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e010c20793663c45027ca98185c6f964f0d7d7c7",
          "body": "feat: belle-todo発リクエスト・移植候補の一括実装 (#100〜#110)",
          "is_bot": false,
          "headline": "Merge pull request #111 from ekusiek716/feat/issues-100-110-batch",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T01:52:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf6570a3ae489871af48f04c8deffddd442a3cd0",
          "body": "src/native/components/ の各種コンポーネントで render 中の ref アクセス・\nimpure 呼び出し・未使用importを修正。useRef(...).current パターンを\nuseState lazy initializer に置き換え、GlassView の optional peerDep 解決を\nモジュールスコープへ巻き上げ。npm run lint / check:agent とも green。\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: react-hooks/purity 系 lint エラー47件を解消",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T01:46:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b0e5cf0adf0e1c6769238958b7de70ea0ffb0a2d",
          "body": "- BottomTabBar: アクティブタブの背景ピルから外側ドロップシャドウを除去\n  (ピル本体 .glass の影と二重になり煩いため、インセットハイライトのみに)\n- BottomTabBar/MobileTabBar: centerAction がラベル無しのとき幅広ピルでなく\n  正円 FAB(size-12)で描画。MobileTabBar 側の二重円も解消し belle-todo の丸 FAB の見た目に\n- CollapsibleChipField: 折りたたみ/展開時の行高変化を 200ms ease-out で\n  アニメーション(prefers-reduced-motion 時は即時)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: UIフィードバック3件(タブ選択の影/丸FAB/ChipField高さアニメ)(#111)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T01:43:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0ebec5235bd7473c623d6d6a288a60e5ac663e05",
          "body": "上から降るだけの confetti に加え、中央から全方位(360°)に放射状へ\n弾ける party popper(クラッカー)演出 effect=\"burst\" を追加。\n既定は effect=\"fall\"(既存挙動を維持、後方互換)。\nCelebrationDialog は達成演出用コンポーネントのため既定を burst にし、\nparticleCount 未指定時は burst 向けにやや多め(40)を渡すよう変更。\npreset.css に celebration-confetti-burst keyframe(序盤高速→減速→\n終盤なだらかにフェードアウトの構成)を追加し、confe\n[…]\noverflow-hidden を移してカードの drop shadow クリップも修正。\nnative(Celebration.tsx / CelebrationDialog.tsx)にも同等の effect\nprop と Animated ベースの burst アニメーションを実装。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Celebration に confetti burst エフェクトを追加 (#111)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T01:42:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f6628afad387efb392c530d78ab731271dfa3e22",
          "body": "- Button に size=\"icon-fab\"(58px) を追加し、BottomTabBar pill(h-58px) と\n  浮かせて並べたとき高さが揃うように。FAB 併置ストーリーも icon-fab に変更\n- CelebrationDialog に icon スロットを追加(emoji より優先、iconsax Bulk 推奨)。\n  web/native 両対応 + IconsaxBadge ストーリー追加\n- DateField/DatePicker の日付選択時のちらつきを修正:\n  ポインタ選択で閉じる際の Radix フォーカス返却(トリガーのリング再点灯)を抑止し、\n  DateField の Date インスタンスを useMemo で固定して閉じアニメ中の再レンダーを防止\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: レビューフィードバック3件(FAB高さ/iconスロット/DateFieldちらつき)(#111)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T01:28:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3aabdf745aaf0bf9f4c7efb54000a0354ef595a3",
          "body": "素の絵文字 span を、Surface-Accent-Primary-Light の円形バッジ +\n外側の淡い光輪(-Subtle)に載せる構成へ変更。テーマの Brand 色に自動追従。\nweb / native 両対応。bounce アニメは従来どおり絵文字グリフのみに適用。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: CelebrationDialog の絵文字をブランド連動の円形バッジ表示に (#111)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T01:14:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5facc5f507afd618c36d6dd0983ef7780c573c41",
          "body": "- native Celebration/CelebrationDialog: bounce アニメを Reduce Motion 設定で\n  ゲートする useReduceMotion フックを追加(有効時は最終スケールで静止表示)\n- CollapsibleChipField: selected が options に無い場合に chip が 1 つも\n  表示されない手詰まりを展開扱いで回避(web/native)\n- ChipFilterBar: 件数表示の toLocaleString にロケール明示(hydration mismatch 対策)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: CodeRabbit 追加指摘に対応 (#111)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T00:31:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7667d3bb374091998584e25c528a3bc0fd16d2b0",
          "body": "- glass-accent: 15% ティント + 白前景のコントラスト不足を belle-todo .glass-fab 準拠の\n  ほぼ不透明ブランド背景(95%)に強化して解消。reduced-transparency 時はブランド単色へ\n- CountdownHero: date-only 文字列を UTC でなくローカル日付としてパース(web/native)\n- DateField: 2026-02-31 等の繰り上がる範囲外日付を不正値として弾く(web/native、テスト追加)\n- CollapsibleChipField: alwaysExpanded かつ非 clearable 時の再タップで選択表示が\n  消える視覚不整合を修正(web/native)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: CodeRabbit レビュー指摘 4 件に対応 (#111)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-02T00:23:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a077766bb85d80530970ff807d92f41749b1a194",
          "body": "belle-todo の PartnerPresenceIndicator を汎用化。Supabase realtime・\nタブラベル辞書・i18n・presence null ガードは持ち込まず、\n{ name, statusText?, badgeLabel?, online? } の表示専用 props に再設計。\nAvatar + 右下ステータスドット + statusText + Badge(variant=\"success\")。\nnative 版(既存 Avatar/Badge を利用)も追加。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: PresenceIndicator(プレゼンス表示パターン)を追加 (#109)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:57:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "caddafa5855a5f48cc57e3b21e381e096f3e89d9",
          "body": "DS の DatePicker を \"YYYY-MM-DD\" ISO 文字列 API でラップする薄い adapter。\nstrToDate/dateToStr は new Date(y, m-1, d) のローカルタイム方式で TZ ずれを回避。\nnative 版(既存 native DatePicker.tsx をラップ)も追加。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: DateField(ISO文字列⇄Date adapter)を追加 (#108)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:54:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "62dac3324183deef12f0ccf542954fe9bcc31503",
          "body": "belle-todo の結婚式カテゴリ19色を Categorical トークンのインデックス参照\n(HEX直書きなし)に置き換えて weddingCategories として移植し、\nprojectCategories(プロジェクト管理向け8種)を新設。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: ドメイン別カテゴリプリセットを追加 (#105)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:52:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f3a27f32b16bf04dae2120dd0c53117e33bb66d5",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add MobileTabBar pattern (#107)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:46:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "85c0b1e3d97a4786e47db61ee843eadbeb0ed70f",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add floatingPosition to BottomTabBar pill variant (#103)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:39:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e2280acb790cea27b7f2336c2a73bc755e06bfbc",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add glass-accent variant to Button (#102)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:34:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4ed80166f7af678b743365f572dc63b0772cc7cd",
          "body": "belle-todo の MilestoneCelebration / CountdownSection の UI パターンを移植。\nMILESTONES 定義・アップセル CTA・store・i18n・analytics は持ち込まず、\nemoji/title/description/actions とイラストをスロット化した汎用コンポーネント\nとして再設計。\n\n- CelebrationDialog: DS Dialog + Celebration confetti + emoji/title/description/\n  actions スロット + autoDismissMs。conf\n[…]\n境向けに Georgia/Noto Serif JP/serif へフォールバック。\n  日数計算はローカルタイム基準。既存 CountdownTimer は変更なし。\n\n両方 native 実装(Modal + Celebration / RN Text の serif 表示)を追加。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add CelebrationDialog and CountdownHero patterns (#110)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:28:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7f98304a21a9c47cff9a0d82f7bba798b6c82b7f",
          "body": "belle-todo の milestone-emoji(弾むイージング: 0→1.4→0.9→1 のスケール)を\ncelebration-emoji-pop keyframe として preset.css に移植し、Celebration に\nemojiAnimation?: \"pop\" | \"bounce\" prop を追加(既定 \"pop\" = 現行挙動を維持)。\nreduced-motion 時はアニメーション無効。native 版は Animated.sequence で同等の\nbounce を実装。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add bouncy emoji pop animation to Celebration (#101)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:21:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de9a6c7a213df48e276ca9430cf6e989e631714c",
          "body": "confetti の duration・カラーパレット・ドリフト幅を外部から指定可能にする。\n既存デフォルト値・挙動は完全維持(後方互換)。native 版 Celebration にも同等 props を追加。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add duration/colors/driftRange props to Celebration (#100)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:18:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "af59ffdd743093f48f98a00c177020eebeed291e",
          "body": "belle-todo の FilterBar(Chips.tsx 107-134行)を移植。Chip を横スクロール\n表示するフィルターバーパターン。sticky モード(stickyOffset で top オフ\nセット外出し)・結果件数表示(resultCountLabel で i18n 差し替え可)・bare\nモードを持つ。既存の commerce/FilterBar(filters/sortOptions 統合型)とは\n別コンポーネント。web/native 両実装 + stories + contracts 登録 +\nbackwards-compat テスト。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add ChipFilterBar pattern component (#104)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:10:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7d9c1117e3472b0042dd25068f32ab6efc77f89c",
          "body": "belle-todo の ChipSelector(Chips.tsx 7-87行)を移植。未選択時は全チップ\n展開・選択後は折りたたみ、再タップで解除/再展開する UX。既存の複数選択\nChipSelector(chip-selector.tsx)とは別 API・別コンポーネント。\nweb/native 両実装 + stories + contracts 登録 + backwards-compat テスト。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add CollapsibleChipField pattern component (#106)",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-07-01T23:07:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "47bc6848347f63af29e2d1c9600f62c8020d9a14",
          "body": "[codex] Tune lint-scratch detection",
          "is_bot": false,
          "headline": "Merge pull request #99 from ekusiek716/codex/tune-lint-scratch-detection",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-25T21:03:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1297a3f979ba25d8e71db1d2183e185030e2107f",
          "body": null,
          "is_bot": false,
          "headline": "Tune lint-scratch detection",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-25T21:02:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bee55c42505a95c568084321518fdfeef29a9d53",
          "body": "…nings\n\n[codex] Fix lint-scratch warnings",
          "is_bot": false,
          "headline": "Merge pull request #98 from ekusiek716/codex/resolve-lint-scratch-war…",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-25T20:21:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60f51ad2042e1abd25a31c866266334aa3eeb5a3",
          "body": null,
          "is_bot": false,
          "headline": "Fix lint-scratch warnings",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-25T20:19:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96f289f4b2710cbecce4ea8381de59f0181fd215",
          "body": "Add native Screen, PhotoHero, and MediaActionCluster ports, expose skeleton aliases, and add native parity/lookup guardrails.",
          "is_bot": false,
          "headline": "add native parity guardrails",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-25T16:34:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c547473f2b09a2755bfbbd88b6a7140d31faf73",
          "body": null,
          "is_bot": false,
          "headline": "1.40.1",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-25T07:07:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b11e01a97fa424030b371b57bfb97c16871d54b3",
          "body": null,
          "is_bot": false,
          "headline": "Add DESIGN.md contract guardrails (#95)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-25T07:07:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90f925c918ca1d0e9168f96bad7d4d7f3582e8a5",
          "body": null,
          "is_bot": false,
          "headline": "Implement DS followups for DataTable and Progress (#96)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-25T06:55:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8b111659a5088a17d7e05904e138dc9c1ac3f6d",
          "body": null,
          "is_bot": false,
          "headline": "Add DS consumer app shell patterns (#87)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-24T22:32:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3222f7d33d81dbcb60b26a4be138116492f2fc0",
          "body": "Closes #73, closes #74, closes #75, closes #76.",
          "is_bot": false,
          "headline": "Address mobile DS issue followups",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-24T15:45:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c318262a8e9d7ce9f9644ecfc8280a23780ab5f",
          "body": null,
          "is_bot": false,
          "headline": "chore: normalize npm bin paths",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-23T14:44:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01da63f7dd5a4274af39e675de2b7d3f18594b1e",
          "body": "Closes #64, #65, #66, #67, #68, #69, #70, #71.",
          "is_bot": false,
          "headline": "feat: add mobile DS recipes and adoption guardrails",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-23T14:41:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9703e08e2d3d07bf8392ba711c7d3b15fc051531",
          "body": null,
          "is_bot": false,
          "headline": "feat: extend liquid glass bottom tab bar (#61)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-20T15:09:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fedfcf472ad9136c3fba1ab41deca3212899d063",
          "body": null,
          "is_bot": false,
          "headline": "feat: extend data table and celebration APIs (#55)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-20T15:01:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46c78e3c6561279f9a106483e660eef0b16903ec",
          "body": null,
          "is_bot": false,
          "headline": "fix: release script variable expansion (#63)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-20T01:58:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "204896f368dd6e296ef94d83d617698d5297f4e5",
          "body": null,
          "is_bot": false,
          "headline": "1.38.0",
          "author_name": "奥野圭祐",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-20T01:19:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76df240e79be56557a9c89052a9b061d206a98a4",
          "body": "* feat: add media overlay action APIs\n\n* feat: add fullscreen screen primitives",
          "is_bot": false,
          "headline": "[codex] Add media and fullscreen app primitives (#62)",
          "author_name": "keisuke okuno",
          "author_login": "ekusiek716",
          "committed_at": "2026-06-20T01:06:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 10,
      "commits_last_year": 314,
      "latest_release_at": "2026-07-17T03:59:14Z",
      "latest_release_tag": "v1.45.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 14,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 10.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "ksk-design-system",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/ksk-design-system",
          "is_deprecated": false,
          "latest_version": "1.45.0",
          "repository_url": "https://github.com/ekusiek716/ksk-design-system",
          "versions_count": 16,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2635,
          "first_published_at": "2026-06-17T13:48:00.304000Z",
          "latest_published_at": "2026-07-17T03:59:12.229000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [
          {
            "date": "2026-05-29",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_stars": 1
      },
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "examples/native-sandbox/tsconfig.json",
        "mcp-server/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 251465,
      "source_files_sampled": 507,
      "oversized_source_files": 2,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md",
        "templates/AGENTS.md",
        "templates/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 11339
    },
    "dependencies": {
      "manifests": [
        "mcp-server/package.json",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "mcp-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.12.1"
        },
        {
          "name": "class-variance-authority",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.7.1"
        },
        {
          "name": "clsx",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.1"
        },
        {
          "name": "react-day-picker",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.0.1"
        },
        {
          "name": "react-hook-form",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.75.0"
        },
        {
          "name": "tailwind-merge",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.5.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 100,
        "open_issues": 1,
        "closed_ratio": 0.988,
        "closed_issues": 82,
        "closed_unmerged_prs": 2
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "ekusiek716",
          "commits": 301,
          "avatar_url": "https://avatars.githubusercontent.com/u/13484104?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.959
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "codex-review-receipt.yml",
        "publish.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "eslint.config.js"
      ],
      "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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 30 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": 4,
            "reason": "dependency not pinned by hash detected -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "24 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "fe72037e3ea83edc7fced6b0776edb18d2e69503",
        "ran_at": "2026-07-21T21:29:55Z",
        "aggregate_score": 3.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ekusiek716/ksk-design-system",
    "host": "github.com",
    "name": "ksk-design-system",
    "owner": "ekusiek716"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 58,
      "inputs": {
        "security": 39,
        "vitality": 84,
        "community": 32,
        "governance": 55,
        "engineering": 72
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "commits_last_year": 314,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 14
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "14/52 weeks with commits",
                "points": 9.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "314 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 314
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 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": 10,
              "latest_release_tag": "v1.45.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 10.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "10 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~10.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 10.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "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": 57,
            "inputs": {
              "packages": [
                "ksk-design-system"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2635
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,635 downloads/month across npm",
                "points": 45.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2635,
                      "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": 55,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 16,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.959
            },
            "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 96% of commits",
                "points": 0.9,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "merged_prs": 100,
              "open_issues": 1,
              "closed_issues": 82,
              "issue_closed_ratio": 0.988,
              "closed_unmerged_prs": 2
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "99% of issues closed",
                "points": 46.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "100/102 decided PRs merged",
                "points": 37.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 100,
                      "decided": 102
                    }
                  }
                ],
                "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": "at_risk",
            "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": 37,
            "inputs": {
              "followers": 1,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "ekusiek716",
              "public_repos": 4,
              "account_age_days": 4015
            },
            "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": "1 followers of ekusiek716",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "ekusiek716"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "4 public repos, account ~11 yr old",
                "points": 17.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 4
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "ksk-design-system"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "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 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "16 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 16
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 72,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": "eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "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": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": "https://ksk-design-system.vercel.app",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://ksk-design-system.vercel.app",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "at_risk",
        "name": "Security",
        "value": 39,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 39,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.9
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 30 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 4",
                "points": 2,
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "24 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "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": 77,
        "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.94,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md",
                "templates/AGENTS.md",
                "templates/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 11339
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md, templates/AGENTS.md, templates/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md, templates/AGENTS.md, templates/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": "94 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 94,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "examples/native-sandbox/tsconfig.json",
                "mcp-server/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.69,
              "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": "eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "examples/native-sandbox/tsconfig.json, mcp-server/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples/native-sandbox/tsconfig.json, mcp-server/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "69 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 69,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 4",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 251465,
              "source_files_sampled": 507,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/507 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 507,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Could not fetch npm package 'ksk-ds-mcp' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:ksk-design-system@1.45.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T21:30:14.383363Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/e/ekusiek716/ksk-design-system.svg",
  "full_name": "ekusiek716/ksk-design-system",
  "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.23.0 — metodología completa · wiki de métricas.

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