Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-25 04:18 UTC

saaranshM / unsnooze

Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps

JavaScriptMIT★ 60 estrellas⑂ 3 forksdesde jul 2026Ver en GitHub ↗

saaranshM/unsnooze tiene un índice de salud de 59 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (74/100) y la más baja, AI Readiness (43/100). Se actualizó por última vez hace 4 días. Una sola persona concentra la mayor parte del trabajo reciente.

59
global / 100
Moderado

Índice de salud del software

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

59
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

Saaransh MenonCuenta personal
5 seguidores28 repositorios públicosdesde ene 2019Mosambee

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

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

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

74Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 4 días
2.1/36Cadencia de commits — 3/52 semanas con commits
18/18Volumen de commits — 153 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_year153
human_commit_share1
days_since_last_push4
active_weeks_last_year3
Cómo se puntúa
27/27Publica versiones — 15 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~0,8 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count15
latest_release_tagv1.14.0
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases0,8
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

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

Sostenibilidad y Gobernanza

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

57Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
38.2/38.3Aceptación de PR — 1/1 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs1
open_issues0
closed_issues1
issue_closed_ratio1
closed_unmerged_prs0
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
5.6/25Alcance del propietario — 5 seguidores de saaranshM
22.6/25Trayectoria — 28 repos públicos, cuenta de ~7 años
Datos de entrada utilizados
followers5
owner_typeUser
is_verified
owner_loginsaaranshM
public_repos28
account_age_days2747
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 15 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesunsnooze
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

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

66Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/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_ci
has_tests
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
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://unsnooze.combustortech.in
10/10Descripción del repositorio
10/10Topics — 20 topics
10/10Wiki
Datos de entrada utilizados
topicsagentic-coding, ai-agents, anthropic, auto-resume, claude-code, cli, codex, codex-cli, grok, openai, rate-limit, tmux, usage-limit, claude, antigravity, kimi, opencode, openrouter, qwen, zellij
has_wiki
homepagehttps://unsnooze.combustortech.in
has_readme
has_docs_dirno
has_description

Seguridad

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

47En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
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.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
0/5SAST — no SAST tool detected
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 13 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,4
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages45
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de npm:unsnooze@1.14.0 —lo que arrastra la instalación del paquete publicado—: 45 paquetes. No se analiza la alcanzabilidad.

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.

43En riesgo · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 97 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,97
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
0/11Verificación estática de tipos
10/10Entorno reproducible — lockfile
6/10Práctica demostrada con agentes — 3 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,03
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — JavaScript sin configuración de verificación de tipos
55/55Tamaños de archivo manejables — 0/159 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJavaScript
largest_source_bytes56.273
source_files_sampled159
oversized_source_files0

Datos clave

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

Advertencias de recopilación de datos

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

Más detalle

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

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

222333322026-072026-072026-07
Mayor 0Menor 4Parche 3
OpenSSF Scorecard 3.4 / 10
3.4agregado

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-25 04:18 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
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities13 existing vulnerabilities detected
Dependencias directas 9
RegistroPaqueteRestricción de versiónManifiesto
npm@clack/prompts^1.7.0package.json
npmink^7.1.1package.json
npmpicocolors^1.1.1package.json
npmreact^19.2.7package.json
npmframer-motion^12.23.0website/package.json
npmmarked^18.0.6website/package.json
npmnext^16.2.0website/package.json
npmreact^19.2.0website/package.json
npmreact-dom^19.2.0website/package.json
Todas las dependencias no recopilado

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

Avisos de dependencias 0

Instalar npm:unsnooze@1.14.0 arrastra 45 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "agentic-coding",
        "ai-agents",
        "anthropic",
        "auto-resume",
        "claude-code",
        "cli",
        "codex",
        "codex-cli",
        "grok",
        "openai",
        "rate-limit",
        "tmux",
        "usage-limit",
        "claude",
        "antigravity",
        "kimi",
        "opencode",
        "openrouter",
        "qwen",
        "zellij"
      ],
      "is_fork": false,
      "size_kb": 3452,
      "has_wiki": true,
      "homepage": "https://unsnooze.combustortech.in",
      "languages": {
        "CSS": 28792,
        "Shell": 33449,
        "JavaScript": 1242539
      },
      "pushed_at": "2026-07-20T17:24:10Z",
      "created_at": "2026-07-10T11:27:52Z",
      "owner_type": "User",
      "updated_at": "2026-07-24T18:31:34Z",
      "description": "Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "saaranshmenon.me",
      "name": "Saaransh Menon",
      "type": "User",
      "login": "saaranshM",
      "company": "Mosambee",
      "location": "Mumbai, Maharashta",
      "followers": 5,
      "avatar_url": "https://avatars.githubusercontent.com/u/46712446?v=4",
      "created_at": "2019-01-15T11:58:43Z",
      "is_verified": null,
      "public_repos": 28,
      "account_age_days": 2747
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.14.0",
          "kind": "minor",
          "published_at": "2026-07-19T07:15:32Z"
        },
        {
          "tag": "v1.12.2",
          "kind": "patch",
          "published_at": "2026-07-16T11:07:27Z"
        },
        {
          "tag": "v1.12.1",
          "kind": "patch",
          "published_at": "2026-07-16T11:07:27Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-07-14T07:38:47Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-07-13T08:18:57Z"
        },
        {
          "tag": "v1.8.1",
          "kind": "patch",
          "published_at": "2026-07-12T19:45:18Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-07-12T19:15:49Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-07-12T10:55:45Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-07-11T20:36:56Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-07-11T19:52:47Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-07-11T19:52:45Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-07-11T19:43:46Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-07-10T17:48:56Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-07-10T11:28:29Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-07-10T11:28:28Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c9428e49cc4450044fed37585d8a521eddabdc8d",
          "body": "The docked sun only re-measured its landing spot on scroll-progress\nchanges, so a mobile URL-bar collapse, overscroll bounce, or late layout\nshift moved the footer horizon out from under it. It now re-syncs on\nwindow/visualViewport scroll+resize and a body ResizeObserver, and lands\nfully at 99.5% sc\n[…]\nwhole pill\nis the trigger, idling as a live terminal line with a blinking caret. On\ntap the command dims and a tiny sun rises inside the pill with \"copied\" —\nthe site's night-to-dawn arc in miniature.",
          "is_bot": false,
          "headline": "fix(site): mobile sun-horizon alignment; install pill is the copy button",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-20T17:24:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1157e9ee4cb9fed72918806ac2f5ba17256a029c",
          "body": "…button\n\nThe hero badge was hardcoded v1.13 while npm latest is 1.12.2 — now the\nhome page reads the same npm-cross-checked changelog source at build time,\nso the badge always matches what actually shipped. Install-pill copy\nbutton swaps its text label for a clipboard/check icon that fits on\nmobile.",
          "is_bot": false,
          "headline": "fix(site): hero version badge from npm-verified changelog; icon copy …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-20T17:05:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8def7e0a07d0b5bea1dc842ebe1f8f238aaaf23d",
          "body": null,
          "is_bot": false,
          "headline": "chore(site): IndexNow key file for search engine submission",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-19T07:30:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c989f5b4a6e574c4302f3666cd8ba513c07217b",
          "body": "…ows shipped history up to npm latest\n\n- package.json homepage + README site link + repo homepage → the new domain\n- website changelog: a dated section at or below npm's latest is shipped\n  history even when folded into a later publish (1.13.0 ships inside 1.14.0)",
          "is_bot": false,
          "headline": "chore: point homepage at unsnooze.combustortech.in; changelog page sh…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-19T07:14:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ae72c0b8a7b3f89fc531bea07caa038473fb1fb",
          "body": "- guards grid in #prompts was glued to the terminal (elsewhere it follows a\n  lede with bottom margin) — 18px top margin\n- the queued-prompt terminal now scrolls horizontally instead of wrapping\n  its aligned log lines on mobile\n- the center-rising sun dims to 35% while crossing the text column on wide\n  screens (mobile already dimmed), restoring to full as it docks in the\n  footer — command/FAQ rows stay readable during the sunrise leg",
          "is_bot": false,
          "headline": "fix(site): prompts-section spacing + sun readability over text",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-19T06:54:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6210dc0ac911178add648bcdae872462688e8ef",
          "body": "…p does not exist on win32)",
          "is_bot": false,
          "headline": "ci: cross-platform project fixture in prompt-cli tests (hardcoded /tm…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T23:05:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bf87955d165257e1549ed1bf193fbee4921bed5",
          "body": "…skip unix-only 0700/fake-ssh asserts",
          "is_bot": false,
          "headline": "ci: fix win32 test failures — file:// ESM import in mouse exit test, …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T23:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a340eb1db0828861cffef6f28fb356b6beb3416",
          "body": "…oard prompts tab, command row",
          "is_bot": false,
          "headline": "feat(site): queued prompts on the landing page — 03:00 section, dashb…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T22:37:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3bcbe91b55dc2ab011becafa7a3c905c836662b",
          "body": "…covery, statusline anchor, CLI/TUI traps\n\nFinal-review fix wave: CAS-guard every exit from 'launching' (retry/fail/\ndeliver) so a concurrent cancel can never be resurrected or spuriously\nnotified; stamp launchedAt and sweep crash-stranded launches back to\npending; feed the statusline-exact reset in\n[…]\nare trailing --host instead of silently clearing the local queue;\nsuppress dashboard global keys during the remove y/n confirm, not just\nthe add-form; and measure verify delay from the real send time.",
          "is_bot": false,
          "headline": "fix: prompt-queue hardening — launching-state CAS, stranded/orphan re…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T22:22:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b15a9b82b7d536c0adee5546e68fa731e346e9ca",
          "body": "…bsite)",
          "is_bot": false,
          "headline": "docs: dashboard tab lists include fleet and prompts (help, README, we…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T22:00:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5d4306f53ab392ea50fb42ee22d7d6704ffaf6b",
          "body": null,
          "is_bot": false,
          "headline": "docs: queued prompts — README, website docs, changelog 1.14.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:54:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4647252c8933ab1000090978e835cbb089069c12",
          "body": "submitFinal had zero automated coverage (local queueAdd branch, remote\nremoteQueueAdd branch, duplicate-error formatting, success onRefresh/\nonStatus/setForm wiring). Extract it into an exported submitFinal(state,\nvalue, deps) alongside the existing formReduce/initFormState pure\nhelpers, with queueA\n[…]\nAddFn/readHostsFn injected so tests\nnever spawn or hit the network. Extract removeEntry the same way for the\nlist view's y/n confirmation. PromptsTab now calls both with real deps;\nbehavior unchanged.",
          "is_bot": false,
          "headline": "test: cover Prompts-tab write path via extracted submit handler",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:42:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c3470d60577327e8782ee567f89261818f3aa4f",
          "body": null,
          "is_bot": false,
          "headline": "feat: dashboard Prompts tab — queue list, add-form, TextInput",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:31:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83b02719af881c8ef542471e356b649464a1fd9a",
          "body": "…unts)",
          "is_bot": false,
          "headline": "feat: dashboard read surfaces for prompt queue (status hint, fleet co…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:11:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9d87f6550bec01792f3f981a8789b8791ebef3f",
          "body": "…ue gate",
          "is_bot": false,
          "headline": "feat: fleet prompt queue — remote verbs, controller client, remoteQue…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:02:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cb787aa0cb6b7ca20a4d5a875af47d528f7dd52",
          "body": null,
          "is_bot": false,
          "headline": "feat: unsnooze prompt — queue CLI (add/list/remove/clear), status block",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:46:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c54989c1721a0bf970beb3ad0bcea9088ceafb6d",
          "body": "… stars, starfield on subpages\n\nShared deterministic <Stars /> component: every star gets its own phase and\nduration so the sky never pulses in sync; ~1 in 6 stars glints with a soft\nglow and scale-up. Docs, changelog, feedback and 404 get a dimmed static\nlayer of the same sky. Reduced-motion stills everything as before.",
          "is_bot": false,
          "headline": "feat(site): livelier star twinkle — per-star periods, glinting bright…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:40:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9362f9bf331ac7d62f01d536f00145024c83ea95",
          "body": "…ublished versions only\n\nThe changelog page now cross-checks CHANGELOG.md entries against the npm\nregistry at build time — merged-but-unpublished versions (currently 1.13.0)\nstay off the site until they actually ship, no hardcoded exclusions.",
          "is_bot": false,
          "headline": "feat(site): animated sleeping z's in the brand; changelog shows npm-p…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:35:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f7606c3ce38de0c33bbd66aa8919f78e4fb8427",
          "body": "updateEntry returns the post-state regardless of who performed the\ntransition, so a losing concurrent dispatchPromptEntry call read\nstatus: 'launching' back even though it applied a no-op patch, and\nproceeded to open a second window. Capture the CAS outcome directly\nin the mutator closure instead of inferring it from the returned\nstatus.",
          "is_bot": false,
          "headline": "fix: prompt dispatch CAS actually detects a lost pending→launching race",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:32:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1c52c59d1bb55447fd8eba62f2e8422b5f49749",
          "body": "… lifecycle, notify",
          "is_bot": false,
          "headline": "feat: prompt queue delivery — fresh-session dispatch at reset, daemon…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:24:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a88ef50e8ebc504e005ea9977c91006448565152",
          "body": "…links under 560px",
          "is_bot": false,
          "headline": "fix(site): mobile nav — nowrap brand, two-row layout with scrollable …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:02:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14f2c4ac9a31bb26ed6d2076aedfbc1eef994241",
          "body": null,
          "is_bot": false,
          "headline": "refactor: adapter launchArgs + extract awaitReadyAndSend from reopen",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:56:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f82d3d4d3dda74ed128d341090193fec99478f2",
          "body": null,
          "is_bot": false,
          "headline": "chore: gitignore .vercel and .env* (vercel link artifacts)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:56:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e50a583f003e4c2f748d9bc4ae6a5c4fd5d81bf9",
          "body": "… labeled compare header\n\n- --faint #5b6470 → #78828f (3.26:1 → ≥4.8:1 on night/panel backgrounds)\n- contract dl: Reveal renders the group div directly (dl > div > dt+dd)\n- comparison table corner header gets an sr-only 'Capability' label",
          "is_bot": false,
          "headline": "fix(site): a11y to 100 — AA contrast for faint text, valid dl groups,…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:52:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02d11af3b51dfd3d6c0e00150fc3bfa8ac9d8f32",
          "body": "…ueue.js)",
          "is_bot": false,
          "headline": "feat: prompt queue core — state promptQueue + CRUD/due-ness (prompt-q…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:47:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e25730c1f562372bb0cbe628ef476bc415edaf86",
          "body": "- App Router in website/: / + /docs/ + /changelog/ statically generated\n  (full HTML at build), /feedback/ force-dynamic SSR so fresh submissions\n  are server-rendered into every response\n- changelog reads ../CHANGELOG.md at build via fs (same in-sync guarantee)\n- SEO: per-route keyword-tuned metada\n[…]\npositioned celestial; Lighthouse perf 97 / SEO 100\n- retire GitHub Pages (workflow deleted); Vercel deploys from website/ root\n- env renamed to NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY",
          "is_bot": false,
          "headline": "feat: migrate website to Next.js 16 — SSR on Vercel, max SEO",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:31:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2c3d80876b618d1fe7714518195167427ba95f7d",
          "body": "…❯ brand restored\n\n- /feedback/ route: bug/idea board backed by Supabase (thin PostgREST client,\n  honeypot, RLS: anon may insert visible+new and read non-hidden — no\n  update/delete); schema in website/supabase/schema.sql, deploy env via\n  repo Variables in pages.yml\n- docs: full multi-host fleet s\n[…]\nard mock: fleet tab, real tab order, doctor tab matches real TUI\n- logo experiment reverted — back to the amber ❯ brand everywhere\n- celestial: moon starts below the nav; docks into the footer horizon",
          "is_bot": false,
          "headline": "feat: website v2 — supabase feedback board, fleet docs, audit fixes; …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T17:51:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c3defa2c827bbd44451b9e907edffd56c52cb56",
          "body": "Each Fleet-tab host header now shows a dim auth tag (`key`, `pw:command`,\n`pw:keychain`, `pw:env`, `pw:prompt`) from the host descriptor, so you can\ntell at a glance what a host authenticates with — and, for a needs-auth\nhost, why. Absent descriptor → no badge (legacy-safe).",
          "is_bot": false,
          "headline": "feat: fleet dashboard — per-host auth badge (key / pw:<source>)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T11:21:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0602962c38481373b30d1349b1c794a154d8aabb",
          "body": "…urface the secret)\n\nresolveCommand's AuthError embedded the failed command's stderr (capped/\nstripped but not redacted), so a secret-manager command that debug-prints\nthe password to its own stderr on failure could show a short value in the\nuser's `hosts test` output. Build the message from the exit code alone:\ndefaultShellRun now carries `.status` and no stderr; resolveCommand reports\nonly `command source failed (exit N)`. Removes the now-unused\nstripControlChars helper.",
          "is_bot": false,
          "headline": "fix: redact command-source stderr from resolveCommand errors (never s…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T11:14:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f76a8bf94e6993dc40634463cf31c29e734eda5",
          "body": "The unsnooze mark — a crescent moon cradling the terminal prompt, z's\ndrifting off — as assets/logo.svg, inlined in the site nav (LogoMark),\ncarried by every page favicon, and atop the README.\n\nWebsite: Vite + React, three static routes (landing / docs / changelog,\nthe changelog rendered straight from CHANGELOG.md), night-sky-to-dawn\nscroll treatment. Deployed to Pages by .github/workflows/pages.yml on\npushes touching website/ (build in CI; dist/ and node_modules stay\nuntracked).",
          "is_bot": false,
          "headline": "feat: logo + project website (GitHub Pages)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T10:52:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1524b99d1adef25a99b03a298197f47ad60d88fc",
          "body": "…SKPASS actually runs; confirm-prompt guard, serial interactive prompts, tightened auth-fail match",
          "is_bot": false,
          "headline": "fix: fleet password auth — drop BatchMode for password hosts so SSH_A…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T08:30:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b73d28338e260847feb402242e34d37c7d8ef81",
          "body": null,
          "is_bot": false,
          "headline": "docs: changelog — attribute keychain recipes to the right OS",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T08:05:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c7edd0043ef764e9c46682ccefb6750d242376d",
          "body": null,
          "is_bot": false,
          "headline": "docs: fleet password auth — sources, per-OS recipes, security posture",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T08:00:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9dcc93e611bc1a96ed973f5e7c95912b941c303",
          "body": "fetchHost/remoteAction now surface a distinct state:'needs-auth' (HostResult)\n/needsAuth flag (ActionResult) instead of a plain unreachable/error, either\nwhen sshEnvForHost has no resolvable credential (short-circuits before\nspawning ssh at all) or when ssh exits 255 with an auth-failure stderr on a\n[…]\nare dest string) from\nthe dashboard's Fleet tab into remoteAction, so R/C resume/cancel from the\ndashboard actually uses a password host's configured auth instead of\nsilently falling back to key auth.",
          "is_bot": false,
          "headline": "feat: fleet needs-auth state + hosts test pre-flight",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T07:49:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "05633a8afbd20a5716336df365ba5e7dc39ec832",
          "body": "…r gated by ssh flavor",
          "is_bot": false,
          "headline": "feat: fleet ssh wiring — askpass env for password hosts, ControlMaste…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T07:33:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dc1843eebf01e2ec14c8bf68eb6e63871b160f6",
          "body": "…lper provisioning",
          "is_bot": false,
          "headline": "feat: _askpass helper — no-echo prompt, secret-to-stdout contract, he…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T07:20:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a0d6558b1a3deadc2f4070c79dde9da6f2bb026",
          "body": "…cted\n\ncommand source shell-executes the user's own trusted cmd string\n(git-credential-helper style) instead of naive argv-splitting, so\nquoted args with spaces work correctly. Built-in keychain support is\nmacOS-only; Windows and Linux throw AuthError pointing at --source\ncommand, dropping the unverified Windows CredRead P/Invoke blob.",
          "is_bot": false,
          "headline": "feat: askpass source resolvers (env/command/keychain/prompt), OS-inje…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T07:06:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52d84b43c87c6493256ab9611f9e1785853d8ac1",
          "body": "…tion, add flags",
          "is_bot": false,
          "headline": "feat: fleet host descriptors — per-host auth/source, string→key migra…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T06:59:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15a1c7ba847844dbec0f8779ad4efc5cfba2d1a2",
          "body": "…ion was silently empty)",
          "is_bot": false,
          "headline": "fix: capture ssh -V banner from stderr via spawnSync (live ssh detect…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T06:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "895e1be3026c8d378198032545e64d7f901fe1f5",
          "body": "…scovery",
          "is_bot": false,
          "headline": "feat: fleet — parse ssh -V for version/flavor + cross-platform ssh di…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T06:37:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7b3fd064df3af2d04ebb940c251076cefcb6035",
          "body": "… on ingest (no paste-RCE / row spoofing)",
          "is_bot": false,
          "headline": "fix: fleet — validate muxSession in attach hints, strip newlines/tabs…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:41:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2254d035760aeea754f5a91eac4e0b23a0d9fcd",
          "body": null,
          "is_bot": false,
          "headline": "docs: fleet resume key is uppercase R (lowercase r refreshes)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:29:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "925bdaca3ac1163f5360a9b1d3a16cb135f22b70",
          "body": "…tup)",
          "is_bot": false,
          "headline": "docs: fleet — multi-host sessions over your own ssh (trust story + se…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:25:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd89ac3777c4129353044045503cf4ca6fb19875",
          "body": "…tach hints",
          "is_bot": false,
          "headline": "feat: dashboard fleet tab — cross-host sessions with staleness and at…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:15:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce0c7e5ac314171fd0dd1e110f9ca5c8ebde4b0f",
          "body": "…read",
          "is_bot": false,
          "headline": "fix: self-contained fetch timeout + re-sanitize stale fleet cache on …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:07:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8dfb008d03349e1fd27ae1d5d184f44cc6e2d749",
          "body": "…d sanitized ingest",
          "is_bot": false,
          "headline": "feat: unsnooze fleet — parallel ssh fan-out with cache, staleness, an…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:58:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7259f0ad9e3ab73b60a53372b4eb23df792d9289",
          "body": null,
          "is_bot": false,
          "headline": "fix: _remote always emits one framed line even on write-path exceptions",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:49:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "caca207ed56d7ea6146e3001012a81bb6b1e23da",
          "body": "…/resume/cancel)",
          "is_bot": false,
          "headline": "feat: unsnooze _remote — forced-command-safe fleet entrypoint (status…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:40:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b8a253ec9e6c6d051889feafdba613234af74a9",
          "body": null,
          "is_bot": false,
          "headline": "feat: status --json + shared markResumeNow core for remote triggering",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:32:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0598f56b6ee7f2d6434649c3bddc076a55fccb7e",
          "body": "… handler exists",
          "is_bot": false,
          "headline": "fix: keep strict asserts in fleet tests; don't route fleet before its…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c2321df9eea4a8a0023b51439570a5cdd2a50fe",
          "body": null,
          "is_bot": false,
          "headline": "feat: unsnooze hosts — registry for fleet ssh destinations",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:22:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6136679b647dac2f41551e779c9a00f5dfc4bf46",
          "body": "… sanitized envelopes",
          "is_bot": false,
          "headline": "feat: fleet primitives — host validation, hardened ssh argv, framed +…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:10:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6954432c51ca1648f9282d411888df0478bddb77",
          "body": "… on re-enable",
          "is_bot": false,
          "headline": "fix: ignore horizontal wheel, deflake SIGTERM test, reset mouse carry…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T06:13:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce8290339fa0661056f50119985d91a307949e5d",
          "body": null,
          "is_bot": false,
          "headline": "docs: dashboard mouse support (settings, help, changelog)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T06:04:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5166a1c48fd135115fae90820ecb9f1c9b9a028",
          "body": null,
          "is_bot": false,
          "headline": "feat: wheel scrollback window in the logs tab",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:57:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1edba669d138e639c90e0e0b0bda98c6f2287556",
          "body": null,
          "is_bot": false,
          "headline": "feat: click a session row to select it (status/sessions tabs)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:51:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1354b22a4d24175202d8f97b113af0ef9a7a0c3",
          "body": null,
          "is_bot": false,
          "headline": "feat: clickable tabs/footer, wheel routing, m toggle in dashboard",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:43:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adb551557a16692da1ffe44c8d2eaabd4c29f254",
          "body": "… paths",
          "is_bot": false,
          "headline": "fix: SIGTSTP actually suspends after mouse-off; cover SIGTERM/SIGTSTP…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:35:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f337ac59f7f0e81c2a41d90026a03d17eb2fbbd0",
          "body": null,
          "is_bot": false,
          "headline": "feat: crash/signal-safe mouse-off cleanup around the dashboard",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:26:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ef548f67a45fad35febc0b92f999692f795a2eb",
          "body": null,
          "is_bot": false,
          "headline": "fix: mouse dispatch — press path filters to onClick zones",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:22:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e011dc4de4fdda653afb1972824eadfa55cb35fd",
          "body": null,
          "is_bot": false,
          "headline": "feat: MouseProvider + Clickable zones over ink measureElement",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:16:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6aae59dbe54c5e53f68c50a04551620abdae0a89",
          "body": "… cap\n\n- Extra mouse buttons (b >= 128, xterm 8-11) now return button: null instead of\n  aliasing to left/middle/right via base = b & 3\n- Horizontal wheel events (base 2/3 for button codes 66/67) return wheel: null\n  instead of fabricated 'up' direction\n- Cap rest carry at 32 chars to prevent unbounded growth on malformed input",
          "is_bot": false,
          "headline": "fix: mouse protocol — extra buttons null, horizontal wheel null, rest…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:12:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "400d4c0b55550281edd0c6eb984a7b8c04e2add8",
          "body": null,
          "is_bot": false,
          "headline": "feat: SGR-1006 mouse protocol parser (chunk-safe) + hit-testing",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:07:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a55e33138c8d728c3178424b3c1732d0f20754e7",
          "body": null,
          "is_bot": false,
          "headline": "feat: mouse config key for the dashboard (default on, UNSNOOZE_MOUSE)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:03:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "559ae456406b615858a3ab699f7c593f9554ce50",
          "body": null,
          "is_bot": false,
          "headline": "release: 1.13.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T04:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a708f5f27f3b2c4a8ee32cb67e85bde45ca03f5",
          "body": "…e-now\n\nA live pane scrape of \"resets 12:04am (UTC)\" seen at 9pm parsed to ~21h in\nthe past (undated + non-ambiguous times deliberately stay past to avoid the\nold blind +24h on stale text). The monitor's first-tick corroboration then\nrejected the stop entirely — any pane-scraped limit stop within ~5\n[…]\nto qualify — beyond any window. Stale text still\nstays past → due-now.\n\nFound by the detection suite's futureBanner(3) failing between 21:00 and\n24:00 UTC; regression tests pin both sides of the rule.",
          "is_bot": false,
          "headline": "fix: roll undated midnight-crossing banners to tomorrow instead of du…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T04:42:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "72334f8a4510779a5c8010db2ee99bc90fe16b45",
          "body": "unsnooze usage — burn-rate & time-to-limit forecast per agent × window:\n- signal ladder (exact statusline % → calibrated-from-observed-stops →\n  estimated) with provenance labels on every figure\n- weighted token burn (cache_read ×0.1, formulaV-versioned), active-minutes\n  denominator, account-wide i\n[…]\n; eighth-block gauges; 80×24 floor with\n  compact one-line mark\n- animated \"❯ + rising z z z\" brand mark shared by dashboard and plain\n  chrome, driven by ink useAnimation, static under screen readers",
          "is_bot": false,
          "headline": "feat: usage forecast, pre-wall warnings, and live dashboard (1.13)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T04:42:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b06383e3040521051674576fb7319af9fd5a545d",
          "body": null,
          "is_bot": false,
          "headline": "release: 1.12.2",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T11:04:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2c03e7f9ec111f001de0e554a7fed438522ac32",
          "body": null,
          "is_bot": false,
          "headline": "ci: skip unix-only launch-surface tests on win32 runners",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T10:53:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16bc41a59295021e3bbb65f21e320afd513d89d9",
          "body": null,
          "is_bot": false,
          "headline": "release: 1.12.1",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T10:49:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa03a4bb2c786ad7b8ace50bbb591c0c444545b8",
          "body": "…d on Linux runners)",
          "is_bot": false,
          "headline": "ci: pin platform in doctor applyFixes test (launchctl assertion faile…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T10:37:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76823dcbae474ac4e31ff95aa2a16ca0e3bfdc96",
          "body": "Daemon PATH fix (launchd revivals died with spawn tmux ENOENT — silent),\n`unsnooze preview` dry-run sharing its decision core with dispatch,\nntfy push notifications (additive, emoji-safe JSON publish, terse privacy\nmode), Trust & security README section + SECURITY.md, npm trusted-publishing\nrelease workflow with provenance, and a reproducible VHS demo tape.\nFailed records now survive the sweeper so give-ups stay explainable.",
          "is_bot": false,
          "headline": "release: 1.12.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T10:06:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbbbc4c8fc4def46e48591b32b5546628a8daa26",
          "body": "unsnooze doctor [--fix] (csg migration sweep + install health check),\npane identity & ownership (stamp + lease liveness before any inject/close;\nmonitors exit with their lease), launch failures degrade to the unwatched\nagent instead of dying, zellij scrollback capture with pre-0.35 fallback,\nweekly-DST and garbage-clock reset-time fixes, CAS status sweeps,\npid-verified state-lock steal, reap skips active resumed panes, and\npristine .unsnooze-orig install backups.",
          "is_bot": false,
          "headline": "release: 1.11.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T07:30:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ce47cb572b9cae9b88bdc9f1b1a18bf17e1011a",
          "body": "Upgrade-window fail-safe (never brick claude during npm -g reinstall),\ndaemon crash-loop guards (ThrottleInterval / Restart=always + RestartSec,\nversion-skew self-restart), 5 MB log rotation (copy-truncate for the\nlaunchd-held daemon.log), resume-retry backoff with resume-now exemption,\natomic singleton lock with recycled-pid takeover, and a once-daily update\nnotice on the launch path.",
          "is_bot": false,
          "headline": "release: 1.10.1",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T06:46:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38e1b7526e857f9cfe8c71e545f67e384fe8752f",
          "body": "Session-name ownership (no more duplicate session: unsnooze), reset-time\naccuracy (banner-anchored times + probing), and upgrade-safe state migration.",
          "is_bot": false,
          "headline": "release: 1.10.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:38:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7035b1fabd9776b2a96c612e3afac70f6137ff8",
          "body": "Existing installs must keep working after the ownership + reset-time\nchanges:\n\n- Heal legacy tmux paneOwner=sessionName so leases match again\n- Pull old blind 5h fallback waits into the probe window (absolute/relative\n  untouched)\n- Keep TMUX_SESSION_NAME as a MUX_SESSION_NAME alias\n- Treat \"try aga\n[…]\nin 0 minutes\" as relative zero, not a fallback miss\n  (restores GUI e2e S13 and real just-lifted banners)\n\nAdd compat-upgrade tests. Verified: 435 unit tests, full tmux e2e (S1–S16),\nzellij smoke e2e.",
          "is_bot": false,
          "headline": "fix: upgrade-safe migrations and zero-minute relative parse",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:35:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d97ec720ef3de79ff47c9ecd57e5dfde9a64f20d",
          "body": "…racy\n\nAfter stacking session-name ownership with reset-time accuracy, update tests\nfor reviveTarget sessionExists and fmtResetProvenance export, and record the\nreset-time work under Unreleased.",
          "is_bot": false,
          "headline": "fix: merge plan1/plan2 test expectations and document reset-time accu…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:22:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07a6acbe2614c8f42d8dd4eabcc339f2c0ab2408",
          "body": "Wrong wake times came from scraping undated pane text and sleeping for\nFALLBACK_RESET_MS (now+5h) when nothing parsed — and from rolling already-\npast absolute clock times forward 24h.\n\n- Thread bannerAt through resetAtMs; relative offsets and next-occurrence\n  math anchor to the banner's own time (\n[…]\nration (transcript or future absolute).\n- Later ticks may upgrade fallback/relative estimates to absolute.\n- Persist bannerAt; status shows provenance (absolute, from transcript /\n  guessed: probing).",
          "is_bot": false,
          "headline": "fix: anchor reset times to the banner, probe instead of guessing 5h",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:20:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5c1176ec122c2849a962e7e96823ed88c3937a64",
          "body": "…h revival\n\nInteractive launcher owns the base name `unsnooze` (and unsnooze-2… on\ncollision); the resumer may join a live session but only creates\n`unsnooze-resumed`. Live session discovery via sessionForPane replaces the\nfrozen MUX_SESSION_NAME constant; tmux newWindow returns paneOwner null;\nuninstall stops the resumer; failed wrap degrades to unwatched CLI; new\nsessions/reap commands and scheduled record sweep/stale abandonment.",
          "is_bot": false,
          "headline": "fix: session-name ownership so interactive launches never collide wit…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:18:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57dbb89d98b91cbbf3285e8b2ab719d356e846c7",
          "body": "contextGuard: estimate a stopped session's context size before waking it;\ninform of or pause on expensive cold-cache resumes.",
          "is_bot": false,
          "headline": "release: 1.9.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-13T08:17:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "330ac9e6749a83733a006c8612dc21bebd8c9f47",
          "body": "Waking a session hours after a limit stop re-reads its entire context at\nfull uncached price (the prompt cache expires in minutes) — a 150k-token\nsession can eat a large slice of a fresh 5h window the moment it wakes,\nand unsnooze spent that quota silently.\n\nNow the context size is estimated from Cl\n[…]\neason>'). Claude-only v1 via the optional adapter hook\ncontextTokens(rec); Codex rollouts carry the same data for a follow-up.\n\nPrompted by r/ClaudeAI feedback on a resume consuming 30% of a 5h quota.",
          "is_bot": false,
          "headline": "Add contextGuard: see and gate the cost of big-context wakes",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-13T08:15:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a463b5150548ffb7f08ec013b54dd7d9fa43368",
          "body": "Ship SEO package description/keywords to npm (1.8.0 already published with\nthe pre-refresh metadata).",
          "is_bot": false,
          "headline": "release: 1.8.1",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:45:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a5496d7b5c1fbc07b234457efaf9860b7776882",
          "body": "Expand package description/keywords and the README comparison table so\ndiscovery matches Qwen, Kimi, OpenCode, Antigravity, OpenRouter, and Zellij.\nGitHub description and topics updated to match.",
          "is_bot": false,
          "headline": "docs: refresh SEO for multi-agent support (1.7+)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:43:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2778fb3d37609847f605372af4c3e4e6375fd051",
          "body": "Notification channels (OSC/BEL/native), dual tmux/Zellij multiplexer, and\nChatGPT desktop app codex resolution. CHANGELOG Unreleased → 1.8.0.",
          "is_bot": false,
          "headline": "release: 1.8.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:15:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a03f3eb740e3a380cb0a5cc106196205d6a37721",
          "body": null,
          "is_bot": false,
          "headline": "fix: correct notification channel docs accuracy",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1afd1bbef8eb68a3cc986e10487311c8c12f6832",
          "body": "README support matrix and config; CLI help; CHANGELOG entry.",
          "is_bot": false,
          "headline": "Document notification channels (OSC, BEL, native)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d46b4cb395133a2a4fac82a1fadb77390a9ffdd7",
          "body": "Enable OSC/BEL channels for in-mux sessions; leave pane-less callers on native.",
          "is_bot": false,
          "headline": "Pass pane context into notify from monitor and resumer",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4ea13c72e186a0ccf47ad112ea742472dc9fc19",
          "body": "Dispatch auto/native/osc/bell with pane context; fall back to native\nwhen OSC/BEL undeliverable so notifications are never silently lost.",
          "is_bot": false,
          "headline": "Wire notify channel dispatch for OSC, BEL, and native",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6fc670a5cb203fab4c46bfa12204dd81d156d13",
          "body": null,
          "is_bot": false,
          "headline": "fix: force OSC respects caller denylist even when server is stale",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d43f968c15534d8f2486a11ca0d13a00fc8522b4",
          "body": null,
          "is_bot": false,
          "headline": "fix: address review feedback for Add notify-tty module for OSC and BEL",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7786cf399ad19f82a660d11450cd85e12c3f7c04",
          "body": "Terminal-branded notifications via client tty OSC and pane BEL, with\nsanitization and injectable fs/mux for tests.",
          "is_bot": false,
          "headline": "Add notify-tty module for OSC 9/777 and BEL channels",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2153f22009aede310b465e76290513bb5b3fb390",
          "body": null,
          "is_bot": false,
          "headline": "fix: address review feedback for Add tmux tty discovery methods",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1aaa915ea6ebc4a4db648109110dc8de813dba5e",
          "body": "Enable OSC-to-client-tty and BEL channels without caching pane/client paths.",
          "is_bot": false,
          "headline": "Add tmux clientTtys, paneTty, and globalEnv discovery",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70c9e3cc254f6325114d29cdac99515605bec9f9",
          "body": "Support auto|native|osc|bell via DEFAULTS, UNSNOOZE_NOTIFY_CHANNEL env, and ENUMS.",
          "is_bot": false,
          "headline": "Add notifyChannel config setting",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3acc2fd4dc44f6890c8fe2c2f3ee0b399f6cef8b",
          "body": "Since July 2026 the Codex app is the ChatGPT desktop app; its bundled\ncodex app-server writes the same ~/.codex/sessions rollouts, so the\nwatcher channel keeps working — verified against a real install with a\nlive probe session (codex-cli 0.144.0-alpha.4): same rollout path and\nnaming, token_count r\n[…]\nover the bundle). Pinned parser behavior for the new\nreason-string rate_limit_reached_type values (workspace credit/limit\nvariants bind the latest-resetting window) and the unified-app rollout\nshapes.",
          "is_bot": false,
          "headline": "codex: support the unified ChatGPT desktop app",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T16:02:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4b845da1907263759c06a3faa55612e33961607",
          "body": "Add zellij backend (dual tmux + zellij multiplexer support)",
          "is_bot": false,
          "headline": "zellij backend: dual tmux + zellij multiplexer support (#1)",
          "author_name": "Saaransh Menon",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T15:36:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05fd7f7e57b7337069476c0e3fe00bff4c9c133c",
          "body": "tmux 3.7b prints a blank line and exits 0 when the -t target does not\nexist, so paneAlive returned true for any pane id. On this branch that\nmade dead-pane revival burn all five attempts in the capture-retry path\n(e2e S5 red on 3.7b); on pre-refactor main the same quirk only leaked\nzombie monitors b\n[…]\ns own pane id back.\n\nVerified on tmux 3.7b: all 16 e2e-simulate scenarios pass, plus live\nzellij 0.44.3 pipeline runs (lease-authorized injection and dead-pane\nrevival for all seven agents' adapters).",
          "is_bot": false,
          "headline": "fix(tmux): paneAlive must not trust display-message's exit code",
          "author_name": "Saaransh Menon",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T15:35:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fedb1689705feb239ce08679507d70422f7db40d",
          "body": "Address saaranshM's PR review:\n- reopenEnv: whitelist rec.env + UNSNOOZE control vars only — never\n  spread process.env into launch argv (zellij persists the command line\n  in pane metadata, so daemon env was readable via ps/list-panes).\n- verifyOne: persist verifyRetries on the record; after 3 retr\n[…]\n tmux e2e-simulate green. Live zellij smoke +\nresumer integration green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01E9nxdQBeVr8RZTkyVEeuJw",
          "is_bot": false,
          "headline": "review: env whitelist, resuming escape hatch, defer owned panes",
          "author_name": "Wave Consulting",
          "author_login": null,
          "committed_at": "2026-07-12T12:18:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a7e53d885877eb40717742f15f4e51ce3fc6912d",
          "body": "Harness-only update (no src/ changes) so the 15-scenario tmux suite\npasses again after the tmux->zellij refactor:\n- _monitor invoked with the new <mux> <owner> <pane> <agent> <leaseId>\n  signature; S5/S8 exercise the structured reopen launchSpec.\n- seeded records use mux/paneOwner/muxSession/leaseId\n[…]\nemon scenarios pin the tmux backend against inherited env.\n\nVerified: two consecutive green full runs (E2E OK), npm test 233 pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(e2e): modernize tmux e2e-simulate.sh for the multiplexer refactor",
          "author_name": "Wave Consulting",
          "author_login": null,
          "committed_at": "2026-07-12T12:05:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "52a5932ade3a6444ad3ccbd76c902d69dd6a9f2a",
          "body": "zellij's list-panes pane_command includes arguments (e.g.\n'claude --resume <id>', 'node -e ...'), so basename(pane_command)\nreturned garbage and isForegroundCommand always failed — the live-pane\nresume path never authorized and every resume fell back to reopen.\nTake the first whitespace token, then \n[…]\n.\n\nCaught by a live resumer->zellij-pane integration test; the unit\nfixture had no args so it passed. Added the arg-bearing cases.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(zellij): paneCurrentCommand must strip args before basename",
          "author_name": "Wave Consulting",
          "author_login": null,
          "committed_at": "2026-07-12T12:05:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 15,
      "commits_last_year": 153,
      "latest_release_at": "2026-07-19T07:15:32Z",
      "latest_release_tag": "v1.14.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 0.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "unsnooze",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "claude",
            "claude-code",
            "codex",
            "codex-cli",
            "openai",
            "anthropic",
            "grok",
            "xai",
            "qwen",
            "qwen-code",
            "kimi",
            "kimi-cli",
            "moonshot",
            "opencode",
            "antigravity",
            "antigravity-cli",
            "gemini",
            "google",
            "openrouter",
            "chatgpt",
            "usage-limit",
            "usage limit",
            "rate-limit",
            "rate limit",
            "5-hour limit",
            "weekly limit",
            "auto-resume",
            "auto-retry",
            "resume",
            "retry",
            "tmux",
            "zellij",
            "ai-agents",
            "agentic-coding",
            "cli",
            "developer-tools"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/unsnooze",
          "is_deprecated": false,
          "latest_version": "1.14.0",
          "repository_url": "https://github.com/saaranshM/unsnooze",
          "versions_count": 15,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2363,
          "first_published_at": "2026-07-10T08:21:30.829000Z",
          "latest_published_at": "2026-07-19T07:16:40.185000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 3,
      "stars": 60,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-12",
            "count": 2
          },
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 3
      },
      "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": 56273,
      "source_files_sampled": 159,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "website/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 45,
        "malicious_count": 0,
        "assessed_package": "npm:unsnooze@1.14.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@clack/prompts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.0"
        },
        {
          "name": "ink",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.1.1"
        },
        {
          "name": "picocolors",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.1"
        },
        {
          "name": "react",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.7"
        },
        {
          "name": "framer-motion",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.23.0"
        },
        {
          "name": "marked",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.0.6"
        },
        {
          "name": "next",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.2.0"
        },
        {
          "name": "react",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.0"
        },
        {
          "name": "react-dom",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 1,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 1,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "saaranshM",
          "commits": 147,
          "avatar_url": "https://avatars.githubusercontent.com/u/46712446?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 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": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "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": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "13 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "c9428e49cc4450044fed37585d8a521eddabdc8d",
        "ran_at": "2026-07-25T04:18:45Z",
        "aggregate_score": 3.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T17:25:44Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-12T15:36:24Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/saaranshM/unsnooze",
    "host": "github.com",
    "name": "unsnooze",
    "owner": "saaranshM"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 47,
        "vitality": 74,
        "community": 44,
        "governance": 57,
        "engineering": 66
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 74,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 153,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "153 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 153
                    }
                  }
                ],
                "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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 15,
              "latest_release_tag": "v1.14.0",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 0.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "15 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 44,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 31,
            "inputs": {
              "forks": 3,
              "stars": 60,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "60 stars",
                "points": 28.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 60
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "3 forks",
                "points": 2.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "packages": [
                "unsnooze"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2363
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,363 downloads/month across npm",
                "points": 45,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2363,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 57,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "merged_prs": 1,
              "open_issues": 0,
              "closed_issues": 1,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1/1 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "decided": 1
                    }
                  }
                ],
                "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": 48,
            "inputs": {
              "followers": 5,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "saaranshM",
              "public_repos": 28,
              "account_age_days": 2747
            },
            "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": "5 followers of saaranshM",
                "points": 5.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 5,
                      "login": "saaranshM"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "28 public repos, account ~7 yr old",
                "points": 22.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 28
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "unsnooze"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "15 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 66,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "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": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": 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": [
                "agentic-coding",
                "ai-agents",
                "anthropic",
                "auto-resume",
                "claude-code",
                "cli",
                "codex",
                "codex-cli",
                "grok",
                "openai",
                "rate-limit",
                "tmux",
                "usage-limit",
                "claude",
                "antigravity",
                "kimi",
                "opencode",
                "openrouter",
                "qwen",
                "zellij"
              ],
              "has_wiki": true,
              "homepage": "https://unsnooze.combustortech.in",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://unsnooze.combustortech.in",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Security",
        "value": 47,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 34,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.4
            },
            "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "13 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:unsnooze@1.14.0 runtime dependency closure — what installing the published package pulls in — 45 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:unsnooze@1.14.0",
                  "assessed": 45
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 45,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 45,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 43,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.97,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "97 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 97,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 41,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.03,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "3 of the last 100 commits agent-authored or agent-credited",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 3,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 56273,
              "source_files_sampled": 159,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/159 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 159,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T04:18:50.075976Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/saaranshM/unsnooze.svg",
  "full_name": "saaranshM/unsnooze",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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