Raw JSON report machine-readable
{
"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"
}