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

koersliven / Session-cove

Pixel-island harbor in your menu bar — visualize projects as islands, browse session history with summaries, approve permissions, and resume any Claude Code conversation in one click.菜单栏里的像素岛屿港湾 — 每个项目是一座岛,浏览历史会话摘要,审批权限请求,一键恢复任何 Claude Code 对话。

SwiftSin licencia detectada★ 4 estrellas⑂ 0 forksdesde may 2026Ver en GitHub ↗

koersliven/Session-cove tiene un índice de salud de 31 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (65/100) y la más baja, Community & Adoption (16/100). Se actualizó por última vez hace 12 días.

31
global / 100
En riesgo

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

koerslivenCuenta personal
0 seguidores7 repositorios públicosdesde jul 2019

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

Métricas por categoría

Vitalidad

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

65Moderado · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 12 días
3.5/36Cadencia de commits — 5/52 semanas con commits
16.6/18Volumen de commits — 69 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year69
human_commit_share1
days_since_last_push12
active_weeks_last_year5
Cómo se puntúa
27/27Publica versiones — 7 versiones publicadas
36/36Recencia de las versiones — última versión hace 9 días
27/27Cadencia de publicación — una versión cada ~5,8 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count7
latest_release_tagv0.1.8
releases_from_tagsno
days_since_latest_release9
mean_days_between_releases5,8

Comunidad y Adopción

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

16Crítico · 18% del índice global
Cómo se puntúa
7.7/60Estrellas — 4 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars4
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
0/22.5Licencia — no se detectó ningún archivo de licencia
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

18Crítico · 24% del índice global
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de koersliven
18.6/25Trayectoria — 7 repos públicos, cuenta de ~7 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginkoersliven
public_repos7
account_age_days2574
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

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

31En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
0/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

20Crítico · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Licencia — license file not detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — sin datos
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate2
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, token_permissions. Los pesos restantes se han renormalizado.

Preparación para IA

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

53Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 64 de 69 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,928
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes4184
Cómo se puntúa
0/18Arranque con un solo comando
0/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Swift (tipado estático)
0/10Entorno reproducible
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 69
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_testsno
lockfiles
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — Swift (tipado estático)
54.6/55Tamaños de archivo manejables — 1/124 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageSwift
largest_source_bytes84.220
source_files_sampled124
oversized_source_files1

Datos clave

4estrellas de GitHub
-contribuidores
69commits en los últimos 12 meses
12días desde el último push
7versiones publicadas
-factor bus
0issues abiertas
ecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Contributor list unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 2.0 / 10
2.0agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-22 12:33 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
n/dToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 18575,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "HTML": 17578,
        "Shell": 26863,
        "Swift": 927615,
        "Python": 5824
      },
      "pushed_at": "2026-07-10T03:22:17Z",
      "created_at": "2026-05-29T08:30:48Z",
      "owner_type": "User",
      "updated_at": "2026-07-10T03:21:44Z",
      "description": " Pixel-island harbor in your menu bar — visualize projects as islands, browse   session history with summaries, approve permissions, and resume any Claude   Code conversation in one click.菜单栏里的像素岛屿港湾 —  每个项目是一座岛,浏览历史会话摘要,审批权限请求,一键恢复任何 Claude Code   对话。",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Swift",
      "significant_languages": [
        "Swift"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "koersliven",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/52559638?v=4",
      "created_at": "2019-07-05T06:17:38Z",
      "is_verified": null,
      "public_repos": 7,
      "account_age_days": 2574
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.8",
          "kind": "patch",
          "published_at": "2026-07-13T02:51:42Z"
        },
        {
          "tag": "v0.1.7",
          "kind": "patch",
          "published_at": "2026-06-17T09:24:07Z"
        },
        {
          "tag": "v0.1.6",
          "kind": "patch",
          "published_at": "2026-06-12T06:32:04Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-06-10T03:40:44Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-06-10T01:50:48Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-06-09T08:03:50Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-06-08T09:47:10Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ff3eec399e9ceb0ac4f46b70bd1ca9e246dc23e7",
          "body": "版本号从脱节的 1.0 对齐到 tag 体系的 0.1.8(承接 v0.1.7)。\n本次发布内容:\n- Codex 审批弹窗接管(hook 通道,终端 codex 生效)\n- Codex app-server 客户端底座(问答/始终允许能力预留)\n- Codex 会话只读扫描 + Ghostty 启动/聚焦修复",
          "is_bot": false,
          "headline": "Release: v0.1.8 — Codex 审批接管 + Codex 会话扫描 + Ghostty 修复",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-07-10T03:20:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca11c98d5276b25e33184049d71d54a591524668",
          "body": "两条互补通道让 Session Cove 接管 Codex 的审批/问答:\n\nHook 通道(对终端手敲的 codex 生效,已验证):\n- CodexProvider: settingsPath=~/.codex/hooks.json, supportsExternalApproval=true\n- ClaudePermissionHook.installForCodex: 复用 Claude-style schema 写入 SC bridge\n  到 PermissionRequest+Stop,剔除 ping-island、保留用户既有 hooks\n- bridge 对 codex 只回\n[…]\nSession / deny→decline,\n  问答回传 {answers:{qid:{answers:[...]}}}\n- 生命周期:仅在启用 codex 时启动、provider 关闭/退出时停止\n- 端口 42477(避开 ping-island 的 41241)\n\n协议依据:codex app-server generate-json-schema(0.143.0 官方 schema)",
          "is_bot": false,
          "headline": "Feature: Codex 审批接管(hook 弹窗 + app-server 客户端底座)",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-07-10T02:33:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3947e43120a26cac9cb676ec7511dda4e9846899",
          "body": "- SessionParser: 解析 Codex rollout JSONL(session_meta/event_msg/response_item),\n  按文件内 cwd 归组(flatDatePartitioned 布局,无 per-project 目录)\n- SessionScanner: 支持 Codex 扁平日期分区 transcript 根扫描\n- GhosttyAdapter: 修复 Ghostty 终端的会话启动/聚焦\n- MapProjectIslandNode: 适配 Codex 会话岛展示",
          "is_bot": false,
          "headline": "Feature: Codex 会话只读扫描 + Ghostty 启动/聚焦修复",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-07-10T02:33:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d1af33aa75a83b83933c044e293956048ca3a13",
          "body": "- SessionParser.parseQoder: 重写解析逻辑适配 qodercli 实际输出的\n  Claude API 兼容格式(message.role+content 替代旧 session_meta+data:null)\n  正确提取 sessionId/cwd/timestamp/firstUserMessage\n- IDEWindowAdapter: 新增 focusWorkspace 用 code CLI 精确打开项目窗口\n- SessionResumer: focusOrLaunch 后追加 IDE workspace 聚焦\n\nCommit tweaks:\n- quick-install.sh: 加固(去掉 set-e/加 python3 JSON 解析/\n  hdiutil -mountpoint 固定路径/详细错误提示)",
          "is_bot": false,
          "headline": "Fix: Qoder parser 适配实际 CLI 格式 + VSCode 工作区聚焦",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-17T09:21:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e13585bd27ad606f5f7e4a89c5bc7c9e8a435e76",
          "body": null,
          "is_bot": false,
          "headline": "Fix: hdiutil mount 用固定路径 -mountpoint 避免空格解析问题",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-16T03:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25eee60beb5d6c294b3ba7049bdef5fdebf400cd",
          "body": "- 去掉 set -e,改为每步显式错误处理\n- 改用 python3 解析 GitHub API JSON(macOS 自带),grep+sed 仅为降级\n- hdiutil attach 输出解析改为 grep -o '/Volumes/[^ ]*',不再依赖 tail+awk 字段计数\n- DMG 下载改用 HTTP 状态码检测,而非依赖 curl -f 退出码\n- pkill 增加路径限定,避免误杀无关进程\n- 每一步失败都有明确的中文错误提示和手动安装指引",
          "is_bot": false,
          "headline": "Fix: quick-install.sh 加固 — 解决用户侧自动退出问题",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-16T03:27:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8945d0f6e5718b598b0990381e071aeb861e10ef",
          "body": "- TokenStats 新增 modelBreakdown 按模型统计(Opus/Sonnet/Haiku/DeepSeek)\n- 基于 Anthropic 官方 API 定价计算等效费用\n- 仪表板新增等效 API 费用指标(珊瑚色高亮)\n- 仪表板底部新增分模型用量行:模型名 | Token数 | 占比 | 费用\n- DailyReportCollector 按 model 名提取并归类 token 数据",
          "is_bot": false,
          "headline": "Feature: Token 价格计算 + 分模型用量展示",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-12T06:11:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6db9130895009cb3e19245f73c34974c7d76db5",
          "body": "- 潮汐日报:深度挖掘 JSONL,全量提取用户消息+assistant 回复,claude\n  --print 生成总-分-总结构日报,海洋海岛风 HTML + WKWebView 展示\n- DailyReportCollector: 流式读取完整 JSONL,提取全量用户消息(去重)、\n  关键 assistant 输出、token 统计\n- DailyReportGenerator: claude --print 生成日报,markdown→HTML 转换,\n  temp file + cat 方案避免 pipe buffer 死锁\n- DailyReportScheduler: 每分钟\n[…]\nr.swift,\n  DailyReportView.swift, DailyReportWindowController.swift\n- 修改: CoveViewModel.swift, Settings.swift, GeneralTab.swift,\n  HarborMapOverviewView.swift, CoveNotchView.swift, PetMascotView.swift",
          "is_bot": false,
          "headline": "Feature: 潮汐日报 + Token 用量面板 + 版本更新提醒",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-11T07:38:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95f7271094ca095447d71530188d3b54f3567e2f",
          "body": "- CoveMascotView: add overrideSize parameter so the image renders at\n  user-specified dimensions instead of hardcoded MascotScale.pet (48×48)\n- PetMascotView: pass overrideSize from reactive petSize state\n- PetWindowController: fix applyPetSize() guard that silently failed\n  because panel.contentViewController was nil (contentView was set\n  directly, not via a view controller)",
          "is_bot": false,
          "headline": "Fix: pet size slider now actually scales the image",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-10T03:38:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ed062ba0eb1c3c648db857ba5b5de1f27b11400",
          "body": "- CustomPetImageStore: user-uploaded pet images saved to ~/.session-cove/\n- DisplayTab: pet size slider (36-200pt, default 48) + image upload/clear\n- Settings: petDisplaySize @Published + covePetSizeDidChange notification\n- PetWindowController: observe size changes, resize NSPanel dynamically\n- Sess\n[…]\niew/CoveRootView: reactive frame sizing via @State + onReceive\n- CoveMascotView customImage: renders user image aspect-fit in pet frame\n- MascotImage: loadCustom() with auto-crop to alpha bounding box",
          "is_bot": false,
          "headline": "Feature: custom pet image + pet size slider + unified resume path",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-10T03:25:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3f7ae3176fbcd948f6801999a6c36d8eb6aa2867",
          "body": "- Cursor before* hooks: pass-through without verdict (Cursor's ask is\n  broken, let user's r2c guard + Cursor handle it)\n- Empty tool_input guard: socket server and Python bridge skip popup\n  when tool_input is empty (prevents blank \"{}\" permission cards)\n- IDEWindowAdapter: focus VSCode/Cursor IDE window for existing\n  sessions instead of launching new terminal\n- TerminalDetector: .app path substring matching for Electron IDE\n  ancestor process recognition",
          "is_bot": false,
          "headline": "Fix: Cursor approval pass-through + IDE terminal focus",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-10T02:43:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "214cb501af53ac0371c1a835c009323eb6b20933",
          "body": "- About tab: ScrollView to prevent content overflow, removed surplus Spacer\n- Settings window: height 480→580 to fit update + diagnostics sections\n- Release notes: DisclosureGroup for expandable full changelog",
          "is_bot": false,
          "headline": "Fix: settings about tab scroll + expandable release notes",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-10T01:49:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93207bfe91ecf5fed2447dfeaa8a95b8fbb75216",
          "body": "- DiagnosticLogger: rolling file log at ~/.session-cove/logs/app.log\n  (500KB max, 2 backups, timestamped + module prefixed)\n- DiagnosticsExporter: collects metadata, logs, configs → creates\n  GitHub Issue via API (falls back to local file + browser if no token)\n- About Tab: \"上报问题\" button with optional description field\n- Added logger calls to UpdateChecker, SessionResumer, CoveViewModel",
          "is_bot": false,
          "headline": "Feature: diagnostic logging + one-click issue report",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-09T08:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f14bd3070c9d26ff5ea4eec1faff91826ae67822",
          "body": "- Always show \"Other\" free-text input for option-based questions\n  with visible \"或 · 自定义输入\" label\n- Replace Cancel with \"稍后再看\": defers question without answering,\n  pending file stays alive, poll skips deferred ID\n- Add \"待处理\" badge in notch header + harbor header to re-open\n  deferred questions\n- Fix completion toast \"Open\" launching new broken session: improved\n  focusOrLaunch with ProcessDetector cwd match + activateTerminalForPid",
          "is_bot": false,
          "headline": "Fix: AskUserQuestion UX + defer + completion open",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-09T08:02:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f0d7fb62f9b859e6a7f21f6db7454b042706ddf",
          "body": "- Show harbor header (+NEW/+Workspace) in notch opened state\n- Enlarge notch opened 600×480 → 660×560 to reduce island overlap\n- Raise editor windows above notch panel (mainMenu+4)\n- Fix right-click/trackpad context menu: makeKey() before sendEvent",
          "is_bot": false,
          "headline": "Fix: notch mode UX issues",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-08T09:45:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88b66198ef82cf5a6ed6adc5374097879de477d9",
          "body": "- Show harbor header (+ NEW / + Workspace) in notch opened state\n- Enlarge notch opened size 600×480 → 660×560 to avoid island overlap\n- Raise editor window level above notch panel (mainMenu+4 > mainMenu+3)",
          "is_bot": false,
          "headline": "Fix: notch mode header + editor window z-order",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-08T09:40:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f49bd736f790867db37074bb56fd052f5355d4fa",
          "body": "curl -fsSL .../quick-install.sh | bash\n→ download latest DMG → mount → copy to /Applications → xattr + codesign → launch\n\nAlso updated 用户指南 to recommend this as the primary install method.",
          "is_bot": false,
          "headline": "Feature: one-line quick install script for DMG users",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-08T09:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aaebbdaae17c2ac3dd2458206f2be9ae219c2530",
          "body": "通俗易懂的完整功能说明,涵盖安装、界面、核心功能(会话管理、\n审批弹窗、Workspace、自动更新)、设置、终端支持、FAQ。",
          "is_bot": false,
          "headline": "Docs: 添加中文用户指南",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-08T09:13:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e904d8bca0b2ff99df7cddbcc7af02e0ec1aaac3",
          "body": "- Fix updater script: use PID-based wait, xattr -cr, codesign --deep\n- Fix bundle.sh: sign executable with entitlements after deep sign\n- Add system notification (UserNotifications) when polling finds update\n- Remove debug logging from updater script",
          "is_bot": false,
          "headline": "Fix: auto-update install flow + notification on new version",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-08T08:59:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "677af6fafa6b1eb9b56dbbc7a2623fa939db414d",
          "body": "- UpdateChecker: poll GitHub releases/latest, semver compare, download\n  DMG, mount, replace /Applications/Session Cove.app, relaunch\n- AboutTab: \"立即更新\" button triggers download→install→restart flow\n- Ad-hoc codesign + entitlements (sandbox disabled) for network access\n- GitHub token support (~/.session-cove/github-token) for rate limits\n- create-release.sh: one-command DMG build + gh release upload",
          "is_bot": false,
          "headline": "Feature: auto-update with download + silent install",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-08T08:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7bdaf658c4f0001315097df7701196ef594700d",
          "body": "- Workspace: create multi-repo workspaces with symlinked repos,\n  independent session ownership, and pending-claim auto-capture\n- New Session: standalone launcher window from harbor header\n- Harbor map: unified MapItem rendering (islands + workspaces),\n  workspace nodes with WS badge and active bubb\n[…]\ntar\n- Delete island: right-click to trash all sessions + remove node\n- Delete workspace: confirmation alert, trashes directory + sessions\n- Chinese localization for workspace editor and new session UI",
          "is_bot": false,
          "headline": "Feature: Workspace + session management UX overhaul",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-08T07:39:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8dc692907693dd4709e87d518649e625fd101e2e",
          "body": "1. Batch delete sessions from island session list:\n   - \"选择\" button in header toggles selection mode\n   - Checkboxes appear next to each session card\n   - \"删除选中\" red button at bottom executes batch trash\n   - All deletions use existing trashItem (recoverable)\n\n2. Custom session naming:\n   - SessionN\n[…]\n→ popover with rename TextField\n   - Custom name displays in bold above AI summary (which becomes lighter)\n   - Names persist across app restarts\n   - Stored locally (not written to Claude transcript)",
          "is_bot": false,
          "headline": "Feature: batch delete + custom session naming",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-08T02:44:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea5dfbc92f577e283d2fb0a1d5959340863c999e",
          "body": "SC's install() now strips ALL ping-island hook entries across every\nevent type (Notification, SessionStart, SessionEnd, SubagentStop,\nPreCompact, PostToolUse, UserPromptSubmit, etc.) — not just the three\nSC manages (PermissionRequest, PreToolUse, Stop).\n\nAlso removes ping-island's statusLine entry w\n[…]\n SC matching → two\n  bridge processes competing for the same response → duplicate popups\n- settings.json override loop: SC install and PI startup each\n  overwriting the other's entries on every launch",
          "is_bot": false,
          "headline": "Auto-clean ping-island hooks + statusLine on SC install",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-07T02:50:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f5d46311c9f111d973430d3f79f53d11a6d16b15",
          "body": "Root cause of duplicate popup: SC registered BOTH PreToolUse AND\nPermissionRequest hooks for AskUserQuestion. PreToolUse fired first\n(before Claude was ready to consume answers), showed an early\nineffective popup. PermissionRequest fired second (Claude ready),\nshowed the real effective popup.\n\nFix: \n[…]\nnow handled ONLY through PermissionRequest (which also fires for\nquestion tools). Single hook = single popup = single answer delivery.\n\nVerified: popup appears exactly once, answer consumed by Claude.",
          "is_bot": false,
          "headline": "Fix duplicate popup + shellQuoted removal + delayed pending cleanup",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-07T02:45:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3eb4985d5c84875e606eb465a2a76dd7dff53848",
          "body": "- HookSocketServer: check if response already exists before writing\n  pending (fast-path for second bridge process)\n- HookSocketServer: skip pending write if file already exists (avoids\n  overwriting after first bridge already wrote it)\n- HookSocketServer: use deterministic hash (toolName + question\n[…]\nevents re-surfacing the\n  same request after user already answered it\n- writeClaudeStyleSettings: removed shellQuoted() from bridge path — Claude\n  spawns the command directly, shell quoting breaks it",
          "is_bot": false,
          "headline": "Fix duplicate popup + shellQuoted removal + delayed pending cleanup",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-07T02:37:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b45e8cf097ca54069b63863aa68c5cb4ef80c4fb",
          "body": "User confirmed: SC popup appeared, answer selected in popup, Claude received\nand consumed the answer. This is the first successful end-to-end test.\n\nArchitecture:\n- HookSocketServer (Unix socket) writes pending files for all hook events\n- Python socket bridge connects to /tmp/session-cove.sock\n- Bot\n[…]\nars (race guard)\n- Socket server on nonisolated background threads (no main thread deadlock)\n\nMinor issue: popup appears twice (once for each hook) but both accept the\nsame answer. Fix in next commit.",
          "is_bot": false,
          "headline": "Question answer delivery via socket bridge — END-TO-END WORKING!",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-05T09:30:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f7b14e244460a30fe0e081691c3219642c070ea",
          "body": "…y works!)\n\nMajor breakthrough: AskUserQuestion answer delivery now WORKS through the\nsocket path. Claude confirmed consuming the answer (\"你还没启动啊\" was\naccepted as the response). The socket architecture eliminates the race\ncondition that plagued the file-poll approach.\n\nArchitecture (matches Ping Isl\n[…]\ntion share the answer\n\nRemaining issue: SC popup not appearing (hookPollTask may not recognize\nthe pending file format from socket server). Answer delivery confirmed\nworking via terminal manual input.",
          "is_bot": false,
          "headline": "Socket bridge architecture: SC server + Python client (answer deliver…",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-05T09:08:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "22ec66645e69b50c77dff28f0003c2491d20f834",
          "body": "…ok emit)\n\nKey discovery from Ping Island timing log:\n- Claude requires BOTH PreToolUse AND PermissionRequest hooks to return\n  the SAME updatedInput with answers for AskUserQuestion.\n- If PermissionRequest returns just \"allow\" without updatedInput, Claude\n  ignores the PreToolUse answer entirely.\n-\n[…]\n updatedInput nested in decision (verified from PI)\n\nNEXT: Replace file-poll with Unix socket architecture (like Ping Island)\nto eliminate the race condition between the two concurrent hook processes.",
          "is_bot": false,
          "headline": "WIP: Question answer format fixes (updatedInput in decision + dual-ho…",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-05T08:41:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dc4b8a403e53153adb7b1aea5da902f83d12b651",
          "body": "Key fix: answers format corrected to match Ping Island's verified schema.\nClaude expects `{\"question text\": \"option label\"}`, NOT `{\"q1\": \"q1-o2\"}`.\nHookQuestionView.submissionPayload now uses question.prompt as key and\noption.title as value. This is the ONLY format Claude accepts per\nempirical test\n[…]\ntedInput + question text keys)\nis the primary delivery mechanism. Managed sessions are scaffolded for\nfuture scenarios where the hook path is unavailable.\n\nAlso: scripts/make-dmg.sh for DMG packaging.",
          "is_bot": false,
          "headline": "AskUserQuestion answer delivery: correct format + managed session infra",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-05T07:31:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "50da97d040a2447425629bd687f645e3232feb94",
          "body": "Terminal injection approach for delivering AskUserQuestion answers\ndirectly to Claude's terminal stdin via iTerm AppleScript `write text`.\n\nStatus: partially working but unreliable due to timing issues.\n- iTerm write text proven to deliver to Claude's stdin (manual test OK)\n- But Claude's streaming \n[…]\nion\n- ITermAdapter.writeText splits into text(newline:no) + delay + return\n\nNext step: Managed Session mode (SC owns the pty via forkpty, writes\nstdin directly — same architecture as claude-sessions).",
          "is_bot": false,
          "headline": "WIP: Terminal text injection for AskUserQuestion (experimental)",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-05T06:07:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1410b6e70ca90aa3dd75a6d3b330c4c4b2d77010",
          "body": "Two new features and one race fix.\n\n1. Session completion notification (Stop hook).\n   ...\n\n[COLLAPSED - see full commit body below]",
          "is_bot": false,
          "headline": "Multi-framework UI + polish: AI 框架 Settings tab + genericized strings",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-05T02:28:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c01a1884d9549b7c1366df53b4a4a9008d87ee31",
          "body": "Phase 4/4 — final phase. 3 sequential workflow steps + verify, all green.\nMulti-framework support is now fully wired: the Claude default state is\nidentical to before, and Qoder / QoderWork / Cursor light up via Settings\n→ AI 框架 toggle.\n\nStep 10 — Settings AI panel + enabledProviders gate + per-provi\n[…]\npre-existing\ncheck-stop.sh and r2c-cursor-hook.sh entries verbatim. AIFrameworksTab\nshows 4 providers, only Claude on, Claude toggle disabled.\n\nPhase 4 of 4 — multi-framework support feature complete.",
          "is_bot": false,
          "headline": "Multi-framework UI + polish: AI 框架 Settings tab + genericized strings",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-04T02:51:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "821e65ec1d94284171891ff035df442b0ec89e64",
          "body": "Phase 3/4 — 2 sequential workflow steps + verify, all green. All\nthree providers registered into AgentProviderRegistry.shared but\nenabled() set still hardcoded [\"claude\"], so they are pure dead code\nuntil Phase 4 wires the Settings toggle.\n\nStep 8 — Qoder + QoderWork profiles:\n- QoderProvider: id=qo\n[…]\nedates phase 3 work; merger is dead\n  code until step 10 toggles Cursor on.\n\nBuild clean, no new warnings. Pre-existing actor-isolation warnings\nin CoveSettingsTests/AllowlistStoreTests are unrelated.",
          "is_bot": false,
          "headline": "Multi-framework new providers: Qoder + QoderWork + Cursor (inert)",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-04T02:10:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c55951ffad0f3e3fe05723eaf4244a549a8319e3",
          "body": "Phase 2/4 — 4 sequential workflow steps + verify, all green.\nClaude path bit-for-bit unchanged (only \"claude\" provider enabled\ntoday). 13 files modified, 0 net behavior change at runtime.\n\nStep 4 — Scanner / Watcher / Parser fan-out:\n- SessionRecord + ProjectIsland gained `var providerId: String = \"\n[…]\nuild clean. Process running. allowlist.json 27/27 rules\nhave providerId. ~/.claude/settings.json 3 session-cove entries unchanged\n(all end --provider claude); other tools untouched. Log clean startup.",
          "is_bot": false,
          "headline": "Multi-framework refactor: scanner/process/resumer/allowlist via provider",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-03T10:03:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a5927ab5dc51d86a26dc068fc6e11c628934dd0",
          "body": "Phase 1/4 of multi-agent-framework support, executed in 3 sequential\nworkflow steps with build verification after each. Pure additive +\nbackward-compat — current Claude Code behavior unchanged end-to-end.\n\nStep 1 — Protocol scaffold (3 new files, no edits):\n- AgentProvider protocol (id / displayName\n[…]\n/.claude/settings.json end with --provider claude; unknown provider\nids warn + fall back to claude dialect; legacy v3 pending JSON without\nproviderId decodes to \"claude\". swift build clean throughout.",
          "is_bot": false,
          "headline": "Multi-framework foundation: AgentProvider protocol + schema v4",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-03T09:41:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7033f02c66caad689b5f4a679f5fba168964b135",
          "body": "Two related notch-mode bugs.\n\n(1) Completion toast hijacked the screen.\nThe notch panel is fullWidth × 750 by design (constant-panel\narchitecture, eliminates flash on AppKit re-layout). For approvals/\nquestions that's fine — those are blockers and the upper half of the\nscreen capturing clicks reinfo\n[…]\nwiftUI content box exactly.\n\nBonus: mock completion ids (`stop-mock-` prefix) now bypass the\n\"silence when terminal frontmost\" check in updatePendingHookRequest\nso Debug menu always renders the toast.",
          "is_bot": false,
          "headline": "Notch popping: shrink panel for completion + grow heights for header",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-03T09:10:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d061bd5a31de752e3949bdcd3a40b456c8531d73",
          "body": "Three Link destinations pointed to github.com/lipu/session-cove which\ndoesn't exist. The actual public mirror is koersliven/Session-cove.",
          "is_bot": false,
          "headline": "Fix wrong GitHub URL in About tab",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-03T08:14:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c890df1e1f034ecf4514a97fe5668a5500d78e74",
          "body": "Three terminals expose no scripting bridge to target a specific\ntab/tty (Ghostty's IPC socket is a vouch request, Warp ships none,\nAlacritty's --socket is opt-in via a patched build only). Their\nfocusSession used to return false unconditionally, so the resumer\nfell through to launch and spawned a fr\n[…]\nisn't running, which preserves the existing fallback chain\n(ancestor → iTerm → Terminal.app → launchNew).\n\niTerm / Terminal / Kitty / WezTerm focus paths and every adapter's\nlaunch path are untouched.",
          "is_bot": false,
          "headline": "Half-adapted focus for Ghostty / Warp / Alacritty",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-03T06:25:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "382c77e5b90191845282a9c2df75966b6b826b08",
          "body": "Completion-toast suppression\n- New CoveSettings.silenceCompletionWhenTerminalFrontmost (default true).\n  When the user is already focused on a terminal (iTerm / Terminal.app /\n  Ghostty / Kitty / WezTerm / Alacritty / Warp), Stop hook completions\n  resolve silently — the result is already on the use\n[…]\n that were producing a dark\n  halo at the corners (the borderless transparent panel has no host\n  space for the drop-shadow to render into, so it clipped to a thin\n  grey ring along the corner curve).",
          "is_bot": false,
          "headline": "Silence completion when terminal frontmost + round expanded panel",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-03T03:03:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9ed67427307aab86265dc844b171f6c028db7e5",
          "body": "Settings window (Bug: Settings… menu silently no-op'd)\n- accessory-policy app + LSUIElement=true means SwiftUI's Settings { }\n  scene never receives `showSettingsWindow:` — the menu item dispatched\n  into nothing. New SettingsWindowController.shared owns an NSWindow at\n  .floating level (so it can't\n[…]\ntrings localized too.\n- PetPlacementStrategy ping constants now `nonisolated static` so\n  CoveRootView (not @MainActor) can derive panel size from the same\n  source of truth instead of hardcoding 388.",
          "is_bot": false,
          "headline": "Settings window + multi-session focus + completion polish + zh buttons",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-03T02:46:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3344d3e5ab5f2795f168569b5ef4ea97adaccb3",
          "body": "Completion mock ids use the `stop-mock-` prefix to mimic real Stop event\nids, but the hookPolling guard only checked `mock-` — so each poll tick\nsaw `real == nil`, treated the completion mock as a real disk-pending\nthat vanished, and called `updatePendingHookRequest(nil)`, blanking the\ntoast within 500ms (especially visible in notch mode where the popping\nspring would barely begin before reverting).\n\nGuard now matches both prefixes.",
          "is_bot": false,
          "headline": "Fix completion mock cleared by hookPolling within 500ms",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-02T04:33:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e1147886527fa0052216e47e44442f86fd0014c",
          "body": "Two new features and one race fix.\n\n1. Session completion notification (Stop hook).\n   - New HookRequestKind .completion + .acknowledge / .openSession\n     decisions. CompletionPingCard renders a 388x120 toast with cyan-mint\n     stroke (vs alert-yellow for approvals) and 知道了 / 打开 session\n     butto\n[…]\nnd CoveNotchView.notchHeight\n  match the same logic so the popping panel grows the same way.\n- Three new Debug menu items: Mock Approval (with detail), Mock\n  Completion Toast, plus the existing pair.",
          "is_bot": false,
          "headline": "Session completion toast + approval detail expansion",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-02T04:27:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "691dbc39cbaf0ee83aa444f19dd6559f3ed4b4f0",
          "body": "- CoveViewModel: pet mode now opens permission UI via .permissionInterruption\n  instead of just playing a ping; suppress auto-present under fullscreen apps.\n- ClaudePermissionHook: bump request expiry 60s -> 24h (Python side touches\n  mtime every 30s); echo original tool_input + answers in updatedIn\n[…]\nr: add reconcilePoppingForPendingHookRequest() so a\n  pending request that already exists when the controller is installed\n  triggers the popping panel (withObservationTracking only fires on changes).",
          "is_bot": false,
          "headline": "Hook stability fixes: race conditions, AskUserQuestion, pet mode",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-02T03:02:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "05af6e64803299280e8cd2a7e75e1689b9e19496",
          "body": null,
          "is_bot": false,
          "headline": "README: refresh harbor preview screenshot",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-01T08:35:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f88ff7bb7ebb4452ef7c2462f3801c3ab0b1978",
          "body": "Adds the question-form preview alongside the harbor and approval shots,\ncalls out the interactive AskUserQuestion path in Features, and rewrites\nthe Terminal table to reflect the seven-adapter cascade landed in the\nprevious commit.",
          "is_bot": false,
          "headline": "README: AskUserQuestion form screenshot + multi-terminal matrix",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-01T08:32:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e37cd182ccad91df5e4a55ddfdd86fdf4321745",
          "body": "Permission approval:\n- Wire up notch-mode .popping state — the approval/question card now\n  appears on hook events. CoveNotchView never had a .popping branch\n  despite NotchStatus.popping being declared since PR 4; new\n  observePendingHookRequest in NotchWindowController bridges\n  pendingHookRequest\n[…]\netailView when\n  uiMode == .sessionFocus + selectedSession is set. Previously notch\n  rendered HarborMap unconditionally — clicking a session silently\n  mutated state but never showed the detail view.",
          "is_bot": false,
          "headline": "Permission UX overhaul, multi-terminal support, stability fixes",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-01T08:28:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6e971ab669e5eca86f6d6406ab52802d049c6d54",
          "body": "- SessionResumer: iTerm2 → Terminal.app two-level TTY focus; fallback to\n  launchNewSession when neither finds the live TTY, replacing the old\n  bringITermToFront hack that left non-iTerm users staring at nothing\n- scripts/bundle.sh: default to universal build (arm64 + x86_64) with\n  opt-out via UNIVERSAL=0; locate resource bundle in universal Products dir\n- scripts/make-release.sh: one-shot universal .app → ditto zip in dist/\n- .gitignore: exclude dist/ artifacts",
          "is_bot": false,
          "headline": "Terminal.app focus fallback + universal release build",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-01T06:00:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29205005031db7d73dafba50c449ef9087073be5",
          "body": "- Right-click any session card (harbor dock or island view) to \"Move to Trash\"\n- Detail view gets a coral trash button next to RESUME\n- Uses FileManager.trashItem so deletion is reversible from Finder\n- Optimistic local removal; FSEvents reconciles the model shortly after",
          "is_bot": false,
          "headline": "Add session deletion via right-click + detail trash",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-01T04:35:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b01008ac6d66997aeb5abb1033f4b5ca9edf853e",
          "body": "Constant-panel: NSPanel stays fullWidth×750, all morphing done in SwiftUI\nvia frame + clipShape(NotchShape) + spring. Single AdaptiveHeader and\nshared HarborMap instance preserve SwiftUI identity across states so the\nsubtree no longer tears down and rebuilds on every transition.\n\nPixelSpriteCache ra\n[…]\n\nscales with compact mode so it tracks the shrunk island. NotchShape gains\nanimatableData for interpolated corner radii. Hover debounce + isAnimating\ngate tightened. Right-click escapes peeking state.",
          "is_bot": false,
          "headline": "PR 8: Notch smoothness — constant panel + sprite cache",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-06-01T03:24:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "35b79decd66404caf0bc2afd7c3615b0582727b7",
          "body": "- OpenedNotchContent now embeds HarborMapOverviewView (showsHeader: false)\n  instead of the placeholder list left over from PR 4.M; spec rows 163/183\n  required the full harbor in the opened state.\n- NotchWindowController adds a global rightMouseDown monitor that pops the\n  shared StatusMenu when th\n[…]\n switch back to .pet mode without hunting for the status-bar icon.\n  Closed state has ignoresMouseEvents=true so a panel-local view monitor\n  cannot see the event — global is the only path that works.",
          "is_bot": false,
          "headline": "PR 7: Wire harbor map into notch + right-click escape",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T17:36:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af82c6f79a5d1606f440ded71f0885aa725afeaa",
          "body": "…wo-stage)\n\n- Mission Control / Space switch: NotchWindowController hooks activeSpaceDidChange to force-close notchStatus instantly (skip animation, avoid being captured in space transition screenshot)\n- Multi-screen follow-mouse: currentScreen() picks NSScreen containing mouse pointer; replaces pre\n[…]\nation upgraded to interpolatingSpring with initialVelocity 0.6 for \"rise + lock\" two-stage feel; T10 unchanged\n- Dark mode verified: NotchShape uses Color.black (RGB 0,0,0), constant across appearance",
          "is_bot": false,
          "headline": "PR 6: Edge-case completion (Mission Control, multi-screen, ceil, T9 t…",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T16:28:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "64eee7f1bf11d2e5169dd779409ad26b9365bfeb",
          "body": "- WindowManager.swap with cross-controller alpha fade (T9 540ms / T10 480ms)\n- ModeTransitionState singleton (@Observable @MainActor) for cross-scene UI gating\n- GeneralTab DisplayMode picker disabled during transition\n- FullscreenAppDetector service: hide notch panel on fullscreen app activation\n- \n[…]\nent (override + isClosing guard, drop drag callback)\n- AppDelegate NSWorkspace.didWakeNotification → forceClose pending hover\n- handleDisplayModeWillChange softened (no orderOut) so swap fade animates",
          "is_bot": false,
          "headline": "PR 5: Mode-switch transition + edge cases",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T16:02:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "508bbba0ace9bb3a4e966a893ad5bbf36d8ffa38",
          "body": "- NotchStatus 4-state machine (closed/peeking/opened/popping) on CoveViewModel\n- NotchHoverDetector with 240ms enter / 320ms exit debounce; dual local+global monitors\n- NotchWindowController.applyNotchStatus switches frame, hit-test rects, ignoresMouseEvents, hover zone, and plays sound (waterSplash\n[…]\nonitor\n- CovePanel.sendEvent re-posts hit-test misses through CGEventTap\n- CoveSoundManager: read correct UserDefaults keys (coveSoundEnabled/coveSoundVolume); volumeOverride now multiplicative factor",
          "is_bot": false,
          "headline": "PR 4: Notch state machine + animations",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T15:39:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "778b153576ce6c7d146288da831fe2de3f84277e",
          "body": "- Add CoveModeWindowController protocol; rename CoveWindowController\n  to PetWindowController with strategy-based placement\n- Add NotchWindowController owning a full-screen-width × 750pt\n  panel with click-passthrough so the menu bar stays usable\n- Add NotchShape (asymmetric corner radii) and CoveNo\n[…]\nManager to instantiate either controller from\n  CoveSettings.displayMode and swap one runloop tick after the\n  .coveDisplayModeDidChange notification\n- Extract PassThroughHostingView into its own file",
          "is_bot": false,
          "headline": "PR 3: Notch mode foundation + closed state",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T14:56:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e203605883cb34c96f95978a858bf4bf2270a15",
          "body": "- Add 4-tab Settings window (General/Display/Permissions/About) wired to\n  CoveSettings.shared and AllowlistStore.shared via @EnvironmentObject\n- Add NSStatusItem in menu bar with shared StatusMenu (Settings…/About/\n  mode toggle/Quit) — same menu shows on right-clicking the pet\n- Mode toggle persists to UserDefaults and posts notification; UI switch\n  arrives in PR 4 once NotificationCenter listener is wired",
          "is_bot": false,
          "headline": "PR 2: Settings UI + status-bar octopus menu",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T14:36:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc42e50334913ea89966a13d896919e15d9e325c",
          "body": "Foundation for the upcoming Notch mode + Settings UI work:\n\n- CoveSettings: rewrite from @AppStorage stub to @Published + UserDefaults\n  didSet so views actually re-render on change. Drop two dead fields\n  (preferredTerminal, compactMode — no consumers). Add displayMode,\n  petAnchorPoint, notchTrigg\n[…]\nry retains the pure\n  clamp helper since CoveSettings is screen-geometry-agnostic.\n\nTests: 19 unit tests across CoveSettingsTests, AllowlistStoreTests,\nAnchorPersistenceTests. swift test passes clean.",
          "is_bot": false,
          "headline": "PR 1: Settings rewrite, AllowlistStore, anchor persistence",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T14:24:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "918dc4c45605c21a7866fd2db8907bc1da8636cb",
          "body": null,
          "is_bot": false,
          "headline": "Add setup & permissions guide to README",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T06:16:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ecd4bf98b69bc516f4fd910777bf63f44335c18",
          "body": null,
          "is_bot": false,
          "headline": "Update README screenshots with harbor map and permission UI",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T05:52:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aafe28db5416a0b309e933d563de9f5d303908af",
          "body": "- NSView-level drag (3pt threshold, immediate tracking)\n- Wink (><) expression when dragged, restored on release\n- Permission buttons: Deny | Always | Yes (no more Session)\n- Always writes allowlist rule for future auto-approval\n- Stale pending file cleanup (60s timeout)\n- Python hook exits graceful\n[…]\nping sound on permission arrival in pet mode\n- Cleaned mascot PNGs (transparent background)\n- Ping card: horizontal layout, anchored to pet position\n- Window expands from/collapses to pet anchor point",
          "is_bot": false,
          "headline": "Pet mode v2: drag, wink expression, permission UX overhaul",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-30T05:36:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15f0ca7d275cf84d88fee70929bc32ed642806f2",
          "body": "- One-line install script: clone → build → bundle .app → /Applications\n- Remove memory-plan/ and .claude/ from tracking (private)\n- Add both to .gitignore\n- Update README links to koersliven org",
          "is_bot": false,
          "headline": "Add install.sh + remove private docs from repo",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-29T09:37:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a509f636b4d723c1696b71873f839e4a2f4575c7",
          "body": "OPEN (active session): AppleScript focus → fallback brings iTerm to front\n  (no longer incorrectly launches new window on TCC failure)\nRESUME/NEW: restore AppleScript create-window approach that was working",
          "is_bot": false,
          "headline": "Fix SessionResumer: separate OPEN/RESUME/NEW logic correctly",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-29T09:33:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0561b48ef085ebbb7c742cbf62e0a4276f20630d",
          "body": "- \"Always/Session\" now adds session to trusted list (not global allowlist).\n  Rules auto-expire when session ends — no permanent global permissions.\n- AskUserQuestion/AskFollowupQuestion auto-allowed so terminal handles\n  interactive Q&A natively without Session Cove intercepting.\n- README rewritten in ping-island style with features, architecture diagram,\n  installation instructions, and supported tools table.\n- Removed dead allowlist write code (saveToAllowlist, deriveMatcherRule).",
          "is_bot": false,
          "headline": "Session-scoped trust + AskUserQuestion passthrough + README rewrite",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-29T09:02:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32fead6d295d4952e6b3fe015135c0fc2b83e041",
          "body": "The .animation(.spring) on frameSize caused SwiftUI to animate internal\nframe dimensions while NSPanel was simultaneously repositioning the window,\nresulting in content flying from top-left to final position on every\ncompact→ping transition.",
          "is_bot": false,
          "headline": "Fix ping card flicker: remove frame size spring animation",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-29T08:30:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee548995cba5ef6c0bc8cd7ecfef314d458fd2c1",
          "body": "Previously \"Always Allow\" saved exact command matches or narrow binary\nprefixes, causing repeated prompts for different commands of the same tool.\n\nNow: \"Always\" scope uses toolInProject (all uses of that tool type in the\nproject auto-approve). \"Session\" scope uses binaryPrefix for Bash commands.\nMatches ping-island's UX where one approval silences the whole category.",
          "is_bot": false,
          "headline": "Broaden allowlist rules: Always = allow all tool calls in project",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-29T08:08:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff887672bd40f8a170f2135c09e56c37efa6ced2",
          "body": "GPT edit deleted match_allowlist() and load_trusted_sessions() definitions\nwhile main() still called them — causing NameError crash on every hook\ninvocation (permissions completely non-functional).\n\nRewrote bridgeScript to:\n- Match ping-island's exact output format (verified via `strings` binary)\n- \n[…]\n\":\"...\"}\n- Restore allowlist fast-path and trusted session checks\n- Use stable hash fields (tool_name, tool_input, cwd) for request ID\n- Clean response files after use to prevent stale hash collisions",
          "is_bot": false,
          "headline": "Fix hook script: restore missing functions, match ping-island format",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-29T08:02:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "01d952fb7364e55e06b0c6283b0d8c4ce82d14d5",
          "body": "- Hook: output {\"behavior\":\"allow\"} for all approve decisions (Claude Code\n  doesn't recognize \"always\" — Session Cove's own allowlist handles repeat\n  approval). Remove extra hookEventName field from output JSON.\n- Hook: delete stale response files before polling and after reading to\n  prevent hash-collision false matches from 200+ accumulated files.\n- MORE page: stagger island node appearance (60ms per node with spring\n  animation) to avoid simultaneous Timer initialization frame drop.",
          "is_bot": false,
          "headline": "Fix permission hook output format and MORE page stutter",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-29T07:37:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c95afc943e91d2bdcea986bf184668b7ed81217",
          "body": "- Add CoveSoundManager with 5 ocean-themed WAV effects (sonar ping,\n  bubble pop, water splash, treasure found, ocean ambient)\n- Fix Always Allow: map alwaysAllow → {\"behavior\":\"always\"} in hook output,\n  remove conflicting ping-island hook on settings update\n- Add session trust persistence (trusted\n[…]\narger bubbles, seaweed, deferred starts\n  to eliminate expansion stutter\n- Clean mascot PNG alpha artifacts (gray checkerboard in headphone band)\n- Reposition MORE button with SpongeBob yellow styling",
          "is_bot": false,
          "headline": "Ocean sounds, permission hook fixes, and UI polish",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-29T07:00:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1386ab7724b84df998fe8b22c670691b42b6facd",
          "body": "- Primary view: island map with PixelOceanBackground, fixed-slot layout (6+8 paging)\n- Selection effect: spotlight beam + sparkles + ground glow + scale 1.22x bounce\n- Session dock: horizontal scroll cards with RUN/OPEN buttons\n- SessionResumer: TTY-based iTerm2 tab focus via AppleScript (read befor\n[…]\noveMascotView unified component\n- Compact bar: removed rectangular shadow, capsule edge overlay\n- Removed 2nd-level island page (single-level map interaction)\n- MAP button z-index fix in extended page",
          "is_bot": false,
          "headline": "Harbor map UI overhaul + session resume + permission hook fixes",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-28T10:04:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0688910e94bce69301e1f4bc9e5d9da38c310d68",
          "body": "macOS SwiftUI menu bar app that visualizes Claude Code sessions as a\npixel-art ocean cove. Includes attention-first UI modes, permission\ninterruption flow, agent room session detail, and hook integration.",
          "is_bot": false,
          "headline": "Initial commit: Session Cove pixel harbor status app",
          "author_name": "lipu",
          "author_login": null,
          "committed_at": "2026-05-28T02:51:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 7,
      "commits_last_year": 69,
      "latest_release_at": "2026-07-13T02:51:42Z",
      "latest_release_tag": "v0.1.8",
      "releases_from_tags": false,
      "days_since_last_push": 12,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 5.8
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 0,
      "stars": 4,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 84220,
      "source_files_sampled": 124,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 4184
    },
    "dependencies": {
      "manifests": [],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [],
      "dependencies": [],
      "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": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": null,
      "bot_contributors": 0,
      "top_contributors": [],
      "contributors_sampled": null,
      "top_contributor_share": null
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": false,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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": null,
            "reason": "no pull request found",
            "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": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "ff3eec399e9ceb0ac4f46b70bd1ca9e246dc23e7",
        "ran_at": "2026-07-22T12:33:37Z",
        "aggregate_score": 2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/koersliven/Session-cove",
    "host": "github.com",
    "name": "Session-cove",
    "owner": "koersliven"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 31,
      "inputs": {
        "security": 20,
        "vitality": 65,
        "community": 16,
        "governance": 18,
        "engineering": 31
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 65,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "at_risk",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 49,
            "inputs": {
              "commits_last_year": 69,
              "human_commit_share": 1,
              "days_since_last_push": 12,
              "active_weeks_last_year": 5
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 12 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 12
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "5/52 weeks with commits",
                "points": 3.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "69 commits in the last year",
                "points": 16.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 69
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 7,
              "latest_release_tag": "v0.1.8",
              "releases_from_tags": false,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 5.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "7 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5.8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "critical",
        "name": "Community & Adoption",
        "value": 16,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 8,
            "inputs": {
              "forks": 0,
              "stars": 4,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "4 stars",
                "points": 7.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "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": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "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
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "critical",
        "name": "Sustainability & Governance",
        "value": 18,
        "weight": 0.24,
        "metrics": [
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "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": 36,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "koersliven",
              "public_repos": 7,
              "account_age_days": 2574
            },
            "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": "0 followers of koersliven",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "koersliven"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "7 public repos, account ~7 yr old",
                "points": 18.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 7
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 31,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "has_ci": false,
              "has_tests": false,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 20,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 20,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 2
            },
            "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "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": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "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": "moderate",
        "name": "AI Readiness",
        "value": 53,
        "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.928,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 4184
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "64 of 69 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 64,
                      "sampled": 69
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "critical",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 12,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Swift (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Swift"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 69",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 69
                    }
                  }
                ],
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Swift",
              "largest_source_bytes": 84220,
              "source_files_sampled": 124,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Swift (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Swift"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/124 source files over 60KB",
                "points": 54.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 124,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Contributor list unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T12:33:43.181636Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/koersliven/Session-cove.svg",
  "full_name": "koersliven/Session-cove",
  "license_state": "absent",
  "license_spdx": null
}

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

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

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