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

sandeco / mira-animator

Agentes e templates para criação de slides animados com D3.js em HTML

HTML · JavaScriptLicencia propia★ 135 estrellas⑂ 44 forksdesde jun 2026Ver en GitHub ↗

sandeco/mira-animator tiene un índice de salud de 51 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (70/100) y la más baja, Security (31/100). Se actualizó por última vez hace 1 día. Una sola persona concentra la mayor parte del trabajo reciente.

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

51
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

SandecoCuenta personal
2357 seguidores78 repositorios públicosdesde mar 2013@sandeco

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npmmira-animator0.1.46426437hace 1 díaslidespresentationd3animationhtmlaiclaudeagents

Métricas por categoría

Vitalidad

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

70Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 1 días
4.2/36Cadencia de commits — 6/52 semanas con commits
17.8/18Volumen de commits — 94 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_year94
human_commit_share1
days_since_last_push1
active_weeks_last_year6
Cómo se puntúa
16.2/27Publica versiones — 6 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 24 días
27/27Cadencia de publicación — una versión cada ~3,2 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count6
latest_release_tagv0.1.21
releases_from_tags
days_since_latest_release24
mean_days_between_releases3,2
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?

50Moderado · 18% del índice global
Cómo se puntúa
34.5/60Estrellas — 135 estrellas
13.6/25Forks — 44 forks
0/15Observadores — 2 observadores
Datos de entrada utilizados
forks44
stars135
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonwindow_too_short
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
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
48.4/80Descargas mensuales — 4264 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesmira-animator
dependents
ecosystemsnpm
total_downloads
monthly_downloads4264
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?

48En riesgo · 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
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — 0% de issues cerradas
25.5/38.3Aceptación de PR — 2/3 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/26 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs2
open_issues2
closed_issues0
issue_closed_ratio0
closed_unmerged_prs1
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
24.2/25Alcance del propietario — 2357 seguidores de sandeco
25/25Trayectoria — 78 repos públicos, cuenta de ~13 años
Datos de entrada utilizados
followers2357
owner_typeUser
is_verified
owner_loginsandeco
public_repos78
account_age_days4887
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 1 días
20/20Historial de versiones — 37 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesmira-animator
ecosystemsnpm
any_deprecatedno
min_days_since_publish1

Calidad de Ingeniería

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

50Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
0/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
10/20OpenSSF Scorecard: CI-Tests — 1 out of 2 merged PRs checked by a CI test -- score normalized to 5
Datos de entrada utilizados
has_ci
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

31En 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
1.2/2.5CI-Tests — 1 out of 2 merged PRs checked by a CI test -- score normalized to 5
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/26 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,1
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

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

49En riesgo · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — templates/engines/AGENTS.md, templates/engines/CLAUDE.md, templates/engines/GEMINI.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 91 de 94 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,968
agent_instruction_filestemplates/engines/AGENTS.md, templates/engines/CLAUDE.md, templates/engines/GEMINI.md
agent_instruction_max_bytes2348
Cómo se puntúa
0/18Arranque con un solo comando
0/22Pruebas automatizadas
0/11Configuración de lint / formato
0/11Verificación estática de tipos
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 89 de los últimos 94 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_testsno
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,947
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — HTML sin configuración de verificación de tipos
53.7/55Tamaños de archivo manejables — 1/41 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageHTML
largest_source_bytes93.746
source_files_sampled41
oversized_source_files1

Datos clave

135estrellas de GitHub
1contribuidores
94commits en los últimos 12 meses
1días desde el último push
6versiones publicadas
1factor bus
2issues abiertas
npm, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:mira-animator@0.1.46; advisories assessed against the repository dependency graph instead

Más detalle

Historial de estrellas y forks 135 ★ / 44 ⇿
135Estrellas
44Forks
4Versiones

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.

025507510012515013544152026-062026-062026-07
Mayor 0Menor 0Parche 4
OpenSSF Scorecard 3.1 / 10
3.1agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
5CI-Tests1 out of 2 merged PRs checked by a CI test -- score normalized to 5
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/26 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 4
RegistroPaqueteRestricción de versiónManifiesto
npmchalk^5.3.0package.json
npminquirer^9.2.0package.json
npmora^8.0.0package.json
npmyoctocolors-cjs^2.1.2package.json
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 11138,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 10123,
        "HTML": 1104377,
        "Shell": 669,
        "Python": 14093,
        "Batchfile": 2062,
        "JavaScript": 498598
      },
      "pushed_at": "2026-07-20T18:37:01Z",
      "created_at": "2026-06-10T18:11:53Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T19:31:39Z",
      "description": "Agentes e templates para criação de slides animados com D3.js em HTML",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "HTML",
      "significant_languages": [
        "HTML",
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "youtube.com/canalsandeco",
      "name": "Sandeco",
      "type": "User",
      "login": "sandeco",
      "company": "@sandeco",
      "location": "Brazil",
      "followers": 2357,
      "avatar_url": "https://avatars.githubusercontent.com/u/3765602?v=4",
      "created_at": "2013-03-04T14:38:58Z",
      "is_verified": null,
      "public_repos": 78,
      "account_age_days": 4887
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.21",
          "kind": "patch",
          "published_at": "2026-06-26T21:24:22Z"
        },
        {
          "tag": "v0.1.11",
          "kind": "patch",
          "published_at": "2026-06-11T18:11:38Z"
        },
        {
          "tag": "v0.1.10",
          "kind": "patch",
          "published_at": "2026-06-11T18:05:21Z"
        },
        {
          "tag": "v0.1.9",
          "kind": "patch",
          "published_at": "2026-06-11T17:09:57Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-06-10T19:55:48Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-06-10T19:44:26Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "909ec79bbdd2b0916e83700d145fef2b1cf0a77a",
          "body": "… e gravacao direta no disco no mira-studio\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): 0.1.44 - teleprompter fora do video (Element Capture)…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-14T13:33:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "853f64fba0da77db2c8d3e4e40b3f58f76740671",
          "body": "…vacao direta no disco\n\nTeleprompter em duas pecas, padrao de todo deck mira-studio:\n- painel lateral (#mira-prompter, tecla T): editor com as chaves T/O/G/E, o\n  texto do slide e o botao de salvar. Some durante a gravacao.\n- overlay central (#tp-ov, tecla O): o que se le no ar. E IRMAO das <section\n[…]\n .cjs e path traversal; e o caminho de disco muxando com as caixas em\nftyp -> mdat -> moov, aberto pelo <video> do proprio Chrome.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mira-studio): teleprompter fora do video (Element Capture) e gra…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-14T13:33:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d7a5ed75754da4d5c235101b9ef4d1365a819965",
          "body": "…o+ (RF-09)\n\ngetUserMedia passa a usar o deviceId de window.__miraStudioPlus quando existe,\ncom fallback para a camera padrao se o id nao existir mais.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mira-camera): respeita a camera escolhida na pre-config do Studi…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-14T13:32:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b6e3b8ea9fc2a1b96b12dcd887571f41e81ef62",
          "body": "…p/smooth off + F6 contentHint motion, veredito do pente fino)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WnB8M44HNfXFmsZPN4ojAZ",
          "is_bot": false,
          "headline": "chore(release): 0.1.43 - gravacao mais fluida no mira-studio (F16 sna…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-13T14:17:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aca35244be0157ad47136e36b0029704fd070894",
          "body": "… da matriz)\n\nMatriz da manha (7 gravacoes, maquina real): encoder, pagina, camera e\nlauncher inocentados (celulas A/C/D/F ~= BASE). Celula E cravou o\ncapturador soltando frames so em conteudo animado - sinal do F6.\ncontentHint 'motion' prioriza fluidez; vigiar nitidez na confirmacao.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WnB8M44HNfXFmsZPN4ojAZ",
          "is_bot": false,
          "headline": "perf(mira-studio): F6 contentHint detail->motion na captura (veredito…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-13T10:07:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fa6902ebb844b018712eef6fd3bbd5da172ec219",
          "body": "Achado da revisao reflexion: a regra so neutralizava scroll-snap-type\ndeclarado no html; deck futuro com snap no body escaparia.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(mira-studio): F16 cobre snap declarado no body alem do html",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-13T02:27:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "88c3b4899e6b74dccab56e687d56f749387fa5ef",
          "body": "Com zoom/DPI fracionario (Windows 125%) o salto instant da navegacao pode\ncair sub-pixel fora do snap point e o snap proximity 'assenta' com animacao\nsmooth depois do salto — micro-scroll capturado no MP4. Regra CSS injetada\npelo mira-record so vale com data-mira-recording ativo; nenhum deck ou\ntemplate precisa mudar. Bancada (mira-perf-probe) sem regressao:\n0 long tasks, rAF gap max 16,8 ms, memoria estavel.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(mira-studio): desliga scroll-snap/smooth durante a gravacao (F16)",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-13T02:07:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6e8436311a504fb9f38ac0595c67ac1c546876e6",
          "body": "…4 gravado\n\nfirstTimestampBehavior 'cross-track-offset' preservava a diferenca entre\nrelogios de origens distintas (mic ~0 vs captura de tela no relogio de\nuptime), jogando os frames de video horas a frente na timeline: o player\nmostrava so o 1o slide e uma duracao gigante. Troca para 'offset' (zera\ncada track no proprio 1o sample); os dois processors nascem juntos no\nstart, entao o desvio A/V maximo e de 1 frame.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(mira-studio): video congelado no 1o frame e duracao absurda no MP…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-13T00:12:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d9627e05397180291df389b8e207809ab300a08b",
          "body": "… cheia com titulo/header, design do lancamento do MIRA)\n\n- templates/decks/mira-perfect: capa com titulo em gradiente, headers com scrim, camada cinematografica (brasas + vinheta + flash), loop perpetuo e cor de marca parametrizada pelas variaveis do bloco @MIRA:THEME\n- CLI new: mira-perfect regist\n[…]\nemplate)\n- skills mira-new e mira-animator: caso especial e secao Variante: mira-perfect\n- docs (uso/temas/cli em pt/en/es) e README atualizados\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): 0.1.42 - novo template mira-perfect (animacao de tela…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-12T23:17:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "21a3bfcea579a85d78066cf96d56ffe81a237755",
          "body": "… e launcher dedicado\n\n- mira-record.js: MP4 1080x1920 via WebCodecs + mp4-muxer (vendorado); painel mostra GPU ativa e seletor de encoder estilo OBS (Auto / GPUs / CPU) com teste real de encode\n- launcher mira-studio-windows.bat: sobe servidor local (nomes reais das GPUs via /__mira/gpus) e abre Chrome dedicado na GPU de alto desempenho, sem tocar no registro\n- installer copia templates/studio/; .gitattributes forca CRLF em .bat\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mira-studio): gravacao MP4 nativa com seletor de encoder por GPU…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-12T23:16:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1b63a88f95d6de8c77fc6971db646d738c9e3975",
          "body": "… embutida ao vivo e gravacao nativa MP4)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): 0.1.41 - nova skill mira-studio (deck 9:16 com camera…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-12T14:41:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d45faa3abb8f6d226b55db238768d0b5fc038df2",
          "body": null,
          "is_bot": false,
          "headline": "Specify config file for mkdocs deployment",
          "author_name": "Sandeco",
          "author_login": "sandeco",
          "committed_at": "2026-07-11T13:41:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f738a64c3761928c5eb64931e64a458cbccbe5e7",
          "body": "Remove mkdocs.yml from the workflow trigger paths.",
          "is_bot": false,
          "headline": "Update workflow to exclude mkdocs.yml",
          "author_name": "Sandeco",
          "author_login": "sandeco",
          "committed_at": "2026-07-11T13:39:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a732bcc7f15663ec9f8b6640e72591c0e863676",
          "body": "…lib/, docs autocontidas)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WWW2Y9RNjos5P72jpsakgv",
          "is_bot": false,
          "headline": "chore(release): 0.1.40 - reorganizacao do repositorio (mira-serve em …",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-11T13:25:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ca90262b11c45c0ffd2371b1cf84574a2f7cc82e",
          "body": "… dev em dev/\n\n- mira-serve.js -> lib/mira-serve.js (refs atualizadas em docs, README e edit.js)\n- mkdocs.yml -> docs/mkdocs.yml (docs_dir/site_dir ajustados; build local em .site/)\n- brainstormings/ e sync-private.sh -> dev/ (privado)\n\nNota: .github/workflows/docs.yml precisa passar a usar -f docs/mkdocs.yml\n(ajuste aplicado a parte por restricao de escopo do token).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WWW2Y9RNjos5P72jpsakgv",
          "is_bot": false,
          "headline": "chore: raiz limpa - mira-serve em lib/, mkdocs.yml em docs/, material…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-11T13:24:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a6987e5848df76d4d0716641a3d97173948c1bdf",
          "body": "….md) sai do repo publico\n\nTudo que e desenvolvimento do MIRA vive apenas no repo privado (mira-private).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WWW2Y9RNjos5P72jpsakgv",
          "is_bot": false,
          "headline": "chore: material de desenvolvimento (claude, agents, CLAUDE.md, AGENTS…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-11T11:37:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0fef3f93913b9ba7d47d9b9da6b8ebfae8688e6",
          "body": "…nal para aulas e conteudo monetizado\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(license): esclarece notice - source-available + permissao adicio…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-11T11:34:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4ef61eb86cb754483ce2fc2f55a3bfffdf8765ee",
          "body": "…ste fora do repo publico\n\nPublico mantem apenas o produto (bin, lib, agents, templates, docs) e os\ndecks-exemplo curados: exemplo-responsivo, mira-launch, mira-edit-livre-demo,\nsite-mira-responsivo. O restante persiste no repo privado sobreposto.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WWW2Y9RNjos5P72jpsakgv",
          "is_bot": false,
          "headline": "chore: fronteira publico x privado - devcontainer e decks pessoais/te…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-11T11:30:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "473466fece6d35ac85c8782aa8ff258aee31f61b",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WWW2Y9RNjos5P72jpsakgv",
          "is_bot": false,
          "headline": "chore: pendencias pos-0.1.39 (edicao livre) + normaliza EOL para LF",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-11T11:29:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6cf15a4aeab77ba327a0f88a9b605ca81322de0d",
          "body": "…em decks/testes\n\n- specs/ manuais movidas para _reversa_sdd/ (casa unica de specs, privada)\n- decks teste-* movidos para decks/testes/\n- teste-enquete-tempo-real.html sai da raiz para decks/testes/teste-enquete/\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WWW2Y9RNjos5P72jpsakgv",
          "is_bot": false,
          "headline": "chore: reorganiza estrutura - specs em _reversa_sdd e decks de teste …",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-11T11:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d0ba980fb57b302e65b1443b713e804c811b152f",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WWW2Y9RNjos5P72jpsakgv",
          "is_bot": false,
          "headline": "chore: ignora pastas do Reversa e brainstormings no git",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-11T11:06:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3e72a6533cf4642e3bfd9128b69e7cf3431fcf7c",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "merge: feat/mira-edit-livre (edicao livre estilo Canva + 0.1.39)",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-10T03:20:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f6e7506b3df39b6953781a7a1bd02573fa3aebbb",
          "body": "…a-edit-free) + skill /mira-webview\n\n- mira-edit-free.js: selecao por clique, mover/redimensionar/girar, texto inline,\n  duplicar/excluir, persistencia por ops em <script id=mira-free-edits>\n- barra unica: um salvar grava ordem de slides + edicoes livres\n- alca de rotacao sempre alcancavel (flip par\n[…]\nntro em full-screen)\n- mira-serve.js: destino normalizado e save silencioso por deck\n- licenca alterada de MIT para PolyForm-Noncommercial-1.0.0\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.39 - edicao livre estilo Canva no modo edicao (mir…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-10T03:20:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0028a1c001451fc4ac9d9a3bc4b3dae288be3f7",
          "body": "Descriptions -24% (~-1.8k tok/sessao, sempre-ligado) e corpos -5%, sem perder\ncapacidade nem gatilhos. Codigo, formulas e valores empiricos intactos.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.38 - otimizacao de tokens das 34 skills do MIRA",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-08T14:55:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0996ac40cb960001254046a5126a6adfca66c692",
          "body": "Passo de otimizacao guiado pelos principios do skill-creator (progressive\ndisclosure + \"keep the prompt lean\"), sem perder capacidade nem disparo.\n\n- Descriptions (carregam em TODA sessao): 28877 -> 21834 chars (-24%, ~-1.8k\n  tok/sessao). Comprimida a prosa \"como funciona\" que duplicava o corpo;\n  \n[…]\necs.\n\nAuditado: YAML valido nas 34, blocos de codigo byte-identicos ao original,\nnenhum gatilho slash perdido, fences balanceados.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(skills): otimiza as 34 skills do MIRA para consumo de tokens",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-08T05:43:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d426fe14c4b49466751147dd051afa76dfe010fd",
          "body": "…yping\n\n- record-slide/build-video detectam deck sem body>section e gravam a\n  pagina inteira como clipe unico, recarregando no t=0 para inicio limpo\n- 1:1 sem cinza gravando index-1x1.html em 1080x1080\n- decks de teste (typing-matrix, area-segura); mp4 pesado fica gitignored\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(slide-to-video): grava cena unica full-screen do mira-animated-t…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-08T05:31:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cedfc0dd3cd38e58445bed59b3785fcbf915dd2b",
          "body": "… em zoom)\n\nNova skill que encena a digitação de um comando de agent harness em zoom:\nfonte mono gigante, fundo #212121, cursor piscando estilo Windows, cadencia\nhumana, janela deslizante ancorada a 100px da borda, quebra via /n, micro\npausa /p<ms>, cor por trecho via <color=#HEX>, entrada por print\n[…]\ne exemplo: simples, quebra, 10 linhas (wait-enter), Matrix\n- registrada em agent-sets, package.json files, docs x3 idiomas, README\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.36 - skill /mira-animated-typing (comando digitado…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-08T04:28:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "87c7aa588b5a2f0cab94c9147bb57bf8a5fa9ead",
          "body": "…ra-squared e /mira-thirds\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.35 - area segura obrigatoria e transparente no /mi…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-08T01:24:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "71c07d4be211b389db47f8b82a1ea512dd76da74",
          "body": "… tercos\n\nDiretiva validada com o usuario: a area segura pertence ao QUADRO (1:1) ou ao\nbox dos 2/3 (thirds), nunca ao palco; titulo e animacao vivem dentro dela e a\nanimacao sempre CHEGA na margem (casarPalco + fitToArea). A margem e\ntransparente: sem faixa vermelha ou CSS/JS de debug em arquivo entregue.\nDecks exemplo-responsivo atualizados para o padrao canonico.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(area-segura): margem de 50px obrigatoria e transparente no 1:1 e…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-08T01:23:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b049d3a885876ef96d34fbd54236558eefe199df",
          "body": "…etiva de título da capa\n\n- /mira-squared (1:1): quadrado 100vh, laterais cinza #333, animação\n  reformulada por metáfora preenchendo o quadrado (viewBox H=W), composição\n  enxuta com título no topo. Fiel ao mockup de referência.\n- /mira-thirds: animação reformulada por metáfora preenchendo os 2/3 d\n[…]\nnsivo/ nos 4 formatos (16:9, 9:16, 1:1, terços).\n- Specs SDD (score 92) e docs responsivos sincronizadas.\n- Bump 0.1.33 -> 0.1.34.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(responsividade): eleva 1:1 e terços por reflow de metáfora + dir…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-07T18:42:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3ccec79f39772fce2fd7a066772cc47f5eb500a4",
          "body": "…o harness\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.33 - aviso não-bloqueante de nova versão ao abrir …",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-07T14:26:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c5d256d573c3e838291870b68c1d817307a139cf",
          "body": "Avisa o usuário quando há versão nova do MIRA ao iniciar a sessão num\nharness (Claude Code, Codex, etc.), sem bloquear e perguntando antes de\natualizar.\n\n- lib/runtime/version-notice.js: script Node puro, copiado para\n  .mira/bin/. Lê só o cache local e sai em ~24ms; a checagem no npm roda\n  em proc\n[…]\nDE.md/AGENTS.md.\n- install ativa, update mantém, uninstall poda o hook.\n- CLAUDE.md: instrução de sempre responder de forma breve.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(update): aviso não-bloqueante de nova versão ao abrir o harness",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-07T14:20:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "03b212e8307010d7b19b5551a77991f43eeb99a0",
          "body": "…comando) + base sempre 11x11 em formacao\n\n- Corrige a animacao da jogada que engasgava no modo remote control: durante o\n  Play o payload de sync congela (posicoes e rec.next) e o slide emite so um\n  comando play {token, playing, from}; cada aparelho roda a propria playRec\n  local. Some o trabalho \n[…]\ne vira quadro gravado em data/ (decisao 23).\n- Deck brasil-noruega segue como cena do gol (excecao legada) + NOTAS-MESA-TATICA.md.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.32 - mesa tatica: Play fluido no remote (sync por …",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-06T14:55:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0562958a0bbbef4ab3fd17438e0f4678be197c73",
          "body": "… no celular e sync remoto\n\nMesa tatica (motor SVG novo):\n- renomear jogador (n e nome) robusto ao arrasto: deteccao de duplo-toque no\n  pointerup + area clicavel cobre o numero; Enter/clique fora salvam, Esc cancela\n- diretiva: todo time sempre tem goleiro (inclusive em cenas de lance)\n- bola \"cola\n[…]\n em new/edit, tags nos templates e spec legada\n\nSkills mira-tactics e mira-remote-control atualizadas (decisoes que nao regridem).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mesa-tatica): editor robusto, goleiros, conducao de bola, painel…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-06T03:03:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e8270b39d548e34478f1317748c0738871b22675",
          "body": "- apresentacao-mira-gsap/tatico-brasil-noruega.html: motor novo com o XI\n  de hoje (Martinelli no lugar do Paqueta) + jogada exemplo em data/\n- teste-remote/tatico-brasil-argentina.html: TACTICS portado (ordem de\n  slots direita->esquerda do motor novo, shorts/skin/hair preenchidos)\n- tatico-real-madrid-barcelona/index.html: idem\n- skin/hair dos jogadores portados por aparencia publica (aproximacao)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: migra as mesas taticas dos decks locais para o motor oficial novo",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-05T19:10:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a9a6b9809ed0a2738800f6608f07960f6d85496a",
          "body": "…necos chibi, jogadas gravadas, data/)\n\nAbsorve a implementacao de C:/slides/decks/mesa-tatica como motor oficial:\n- templates/decks/mesa-tatica/index.html: motor novo autocontido (sem CDN),\n  bonecos chibi com skin/hair, paint, gravacao de jogada por quadros-chave,\n  persistencia em data/ (schema m\n[…]\no que nao podem regredir)\n- specs/manipulacao/mesa-tatica.md + brainstormings/BRAINSTORM_VIDEO_PARA_JOGADA.md\n- README: overlay x slide dedicado\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.31 - mesa tatica oficial: motor novo embarcado (bo…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-05T18:54:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3bae17a7eab40e9a8a636ef3ad38d4a9cb6734e9",
          "body": "…plates/decks/mesa-tatica)\n\nA skill mira-tactics apontava para decks/apresentacao-mira-gsap/, que so existe\nno repo fonte; em projetos instalados o motor nao chegava. Agora o motor de\nreferencia viaja em templates/decks/mesa-tatica/index.html (install/update\ncopiam para mira-templates/decks/) e a SKILL.md resolve o caminho com fallback.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.30 - motor da mesa tatica embarcado no pacote (tem…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-05T16:32:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0b7a60b2d7df0ef46b042889f519674981a8d7f8",
          "body": "… mira/, nunca na raiz\n\n- mira new: mira-edit/draw/tactics.js nascem em <deck>/mira/\n- mira edit: injeta src=\"mira/...\" e migra deck legado (reaponta tag e remove copia da raiz)\n- templates de deck: script tags apontam para mira/mira-*.js\n- CLAUDE.md: diretiva registrada (raiz = index.html + launchers; apoio em mira/; midia em assets/)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.29 - diretiva de estrutura de deck: JS de apoio em…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-05T15:11:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c53eab230ba52e157a678bd9da55a901482a2800",
          "body": "- Skill /mira-remote-control: servidor LAN zero-dependencias + shell de espelhamento\n- Layout limpo: apoio em mira/, imagens em assets/, launchers remote-control-windows.bat e remote-control-apple.command na raiz do deck\n- Palco sem UI: barra de status/controles so no celular; QR discreto no noteboo\n[…]\n scroll)\n- Scrollbar discreta como padrao nos templates de deck\n- Specs remote-control + brainstorm; decks de exemplo brasil-2026 e teste-remote\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): 0.1.28 - mira-remote-control (apresentar com o celular)",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-05T14:14:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "364863c0bc5cbd14e7e3e636e0a7c15cfcfd63f9",
          "body": "…ivel com celular\n\n- servidor: canal POST /draw + draw no broadcast e no join-state\n- deck: traduz tracos entre pixels da tela e coordenadas do palco (1280x720)\n- mira-draw (copia do proto): API minima (onchange/setShapes), canvas visivel\n  fora do modo desenho quando ha tracos, barra horizontal compacta em tela baixa\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(proto-remote): sincroniza desenhos do telestrator + barra compat…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-04T21:41:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4fe41a800f9be36d3c3f651cf9c20af1d7e8e50a",
          "body": "…draw/tactics\n\n- package.json: agents/mira-tactics no files + versao 0.1.27\n- agent-sets.js: mira-tactics no PIPELINE_CORE\n- README: secao das ferramentas de apresentacao ao vivo (P desenha, T quadro tatico)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): 0.1.27 - registra mira-tactics no pacote e documenta …",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-04T21:40:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "251cafa005043078a0f46e16b6b5340eb74a6feb",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: experimentos de chart race e enquete em tempo real",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-04T21:34:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "06158cee98205ac0f24bbbdeac4cfa315801f931",
          "body": "…ote + CLAUDE.md\n\n- BRAINSTORM_MIRA_REMOTE: espelho/presenter/controle via segundo aparelho\n- proto-mira-remote: servidor LAN (Node puro, SSE) com palco 16:9 escalado,\n  fullscreen+paisagem no celular e telestrator embutido\n- BRAINSTORM_MIRA_EDUCACIONAL e BRAINSTORM_MIRA_MANIPULACAO + spec de manipulacao\n- CLAUDE.md: regra de organizacao dos brainstorms em brainstormings/\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: brainstorms educacional/manipulacao/remote + prototipo mira-rem…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-04T21:34:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b11d9b96cb185a985d6c59327c925cfa75d8fef7",
          "body": "…ramentas de autoria\n\n- mira-draw.js: desenho ao vivo sobre o slide (tecla P), caneta, formas, texto, borracha\n- mira-tactics.js: quadro tatico com pecas arrastaveis (tecla T)\n- mira edit retrofita os tres scripts de autoria (edit/draw/tactics) em decks existentes\n- mira new injeta as ferramentas em decks novos\n- docs (pt/en/es), demos e decks taticos de exemplo\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: mira-draw (telestrator) e mira-tactics (quadro tatico) como fer…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-04T21:34:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ca63c2080c16ee3490e4874724892100d871a9c4",
          "body": "- editor canônico em templates/authoring/mira-edit.js, generalizado para\n  detectar body>section (padrão Mira) e main>* (legado GSAP); marcador\n  SLIDE com \"===\" opcional; reorder da fonte com fim de região por tipo\n- os 4 templates de deck referenciam mira-edit.js; `new` copia o editor\n  para cada \n[…]\njs entra no pacote npm (save silencioso via http localhost)\n- writer inclui authoring/ no install; README + help documentam o modo\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(edit): modo edição embutido nos slides (reordenar) + retrofit",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-01T04:10:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "909b0946d3f41b7883c0d4b024f789ba2ef0daad",
          "body": "…culo)\n\nReserva circulo/particula para conceitos abstratos; quando o conceito tem\nreferente concreto, o ator da animacao passa a ser um icone flat reconhecivel,\ninline no SVG, mantendo a Regra Zero (loop interno) e o deck offline.\nFonte aberta apenas (Google Material Symbols/Apache-2.0 ou Iconify), estilo\nflat preenchido recolorido para a paleta do deck, atribuicao em CREDITS.md.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mira-animator): diretiva de icone flat real como ator (menos cir…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-01T03:12:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "02ae245ece325408f47dcad112d1baac4eedf8e2",
          "body": "- Nova familia \"Agentes de Interatividade\" (agentes/interatividade) no nav, com survey e quiz\n- survey e quiz saem de \"Visuais e dados\"; chart-race permanece la\n- mira-slide-to-video documentado no pipeline (grupo Format agents) e em Formatos de video\n- hub de agentes: de cinco para seis familias\n- uso: mencao a chart-race e quiz\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: menu Agentes de Interatividade + slide-to-video (en/pt/es)",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-01T02:47:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "edcb57621e2413ae2a335abe349c6b9c6e592454",
          "body": "- mira-quiz: quiz ao vivo (QR + Google Forms/Sheets, revelacao controlada pelo apresentador)\n- mira-chart-race: corrida de grafico a partir de dados temporais (barras ou linhas)\n- mira-slide-to-video: exporta um ou mais slides para .mp4 (Chrome headless + ffmpeg)\n\nRegistra os agentes em agent-sets.js e no campo files do package.json; bump 0.1.24.\nInclui os brainstorms de interatividade e de quiz que guiaram as skills.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: skills mira-quiz, mira-chart-race e mira-slide-to-video",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-07-01T02:47:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e16dd160f72c6bc84ad98d6855510899f1eda189",
          "body": "- description em bloco YAML dobrado em vez de escalar de linha unica; o\n  dois-pontos seguido de espaco quebrava o parser YAML e o Codex ignorava 9\n  skills (mira-3d, mira-image, mira-offline, mira-qrcode, mira-squared,\n  mira-svg-animator, mira-svg-morph, mira-thirds, mira-vertical).\n- todas as des\n[…]\nnimator, mira-svg-morph).\n- auditoria das 28 skills passa 100% (YAML valido, name igual a pasta,\n  description de 1 a 1024 chars).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(skills): frontmatter no padrao agentskills.io",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-29T23:40:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e77985bba8c3cc5250a319b0ba4a8b4e12eead07",
          "body": "Commitado a pedido, sem revisao desta sessao:\n- template just-animation v2 (mira-animator, mira-new, lib/commands/new.js,\n  templates/decks/sandeco-just-animation-template, specs/just-animation-template-v2.md)\n- spec do mira-svg-animator + assets GSAP (specs/GSAP, decks/apresentacao-mira-gsap/assets/svg)\n- erros_codex.md (diagnostico do YAML invalido em 8 SKILL.md)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: alteracoes em andamento de outra sessao",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-29T23:03:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "863dd54ec5abadb278de9932f5d0b35e6cecaab3",
          "body": "…tempo real) + bump 0.1.23\n\nSlide de enquete ao vivo: QR-code para a plateia votar num Google Forms e\num grafico (donut 3D ou barras) que atualiza em tempo real lendo a planilha\nde respostas pelo endpoint gviz por JSONP (funciona por file://). Se faltar\num dos links (votacao/planilha), o agente pede\n[…]\n\n\nRegistrado em agent-sets, package.json (files), docs (visuais + pipeline x3)\ne README. Artefato validado em decks/teste-survey/.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(survey): skill /mira-survey (enquete ao vivo: QR + resultado em …",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-29T22:44:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fc0c90117b40d230ecc56e54abe084e1b5067404",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): prepara 0.1.22",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-29T16:42:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8979eea8ac0d4baaa00a7eac5b79fc5d5bb76db",
          "body": null,
          "is_bot": false,
          "headline": "chore(templates): renomeia template de animacao",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-29T16:41:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f873aad1bc187516e978c5c4bc214bfa098462b1",
          "body": null,
          "is_bot": false,
          "headline": "feat(templates): adiciona animacao livre",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-29T16:41:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "467842276fc437c39fb1783f421cd2c19dddbaf3",
          "body": "As bibliotecas que o deck carregava por CDN (Tailwind, AOS, Lucide, D3,\nfonte Inter e Three.js) agora viajam vendoradas no pacote e sao copiadas\npara o deck, que passa a abrir por file:// mesmo atras de firewall corporativo.\nNada e baixado em runtime: tudo embarca desde a instalacao.\n\n- templates/ve\n[…]\nra-offline: skill para localizar um deck ja existente (rede de seguranca)\n- .gitattributes preserva as libs vendoradas byte a byte\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: modo offline (decks self-contained, sem CDN) + bump 0.1.21",
          "author_name": "sandeco",
          "author_login": "sandeco",
          "committed_at": "2026-06-26T21:24:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "be5e1e0a09501682ae7055c28ed63e6fa9382e2a",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.20 (skills GSAP de morph e animacao de SVG)",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-19T18:55:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "20d96f582ed5ae4c2264ceda00f456b842c13239",
          "body": "Specs (SDD, 100/100) em specs/GSAP:\n- mira-svg-morph-spec, mira-icon-morph-spec, mira-svg-animator-spec\n- mais o doc de contexto mira-gsap-contexto\n\nSkills novas em agents/ (opt-in, padrao mira-3d/mira-qrcode):\n- mira-svg-morph: 2+ arquivos SVG morfam em loop (GSAP+MorphSVG vendorados, offline)\n- mi\n[…]\nh-sequencia, exemplo-icon-morph), historia-alma,\ne borboleta-bate-asas (asas batendo via scaleX no eixo do corpo, fundo removido).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: camada GSAP no Mira (morph + animacao de SVG) com specs e exemplos",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-19T18:47:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c44dcf10e51be9c79efba2a46836f7d13216ffe5",
          "body": "Quebra a pagina unica de Agentes em 5 paginas por time (core, uteis,\nvisuais e dados, responsivos, transicoes) em pt/en/es, e troca o item-pai\n\"Agents\" do menu por 5 entradas separadas. Reordena o nav: \"Como usar\"\nlogo apos \"Instalacao\" e os agentes em seguida. Rotulos PT/ES dos times\npadronizados com prefixo \"Agentes\".\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: separa times de agentes no menu e reordena navegacao",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-14T23:36:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a2199950fe07b415644f8049bc2ab0a733ab5ef8",
          "body": "- install nao pergunta mais o tema: a escolha de tema/template passa a ser por deck no /mira-new. DEFAULT_THEME fixo em mira-dark.\n- prompts.js: remove a pergunta de tema visual e renumera o passo de git.\n- package-lock.json sincronizado (estava em 0.1.17).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.19; tema padrao fixo no install",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-14T16:53:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e574af98d71bff0b0a71dbba010aa22575bf5bf3",
          "body": "- mira-image-template (gera template de deck a partir de imagem) entra na doc: agentes.* (grupo Visuais e dados), pipeline.* e README, e no registro (agent-sets.js VISUAL_TEAM + package.json files).\n- fix: tabela \"Agentes visuais\" do pipeline.* tinha as linhas mira-visuals e mira-img-animator coladas numa linha so (||); separadas de volta em duas linhas.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: skill mira-image-template na documentacao + fix tabela do pipeline",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-14T16:44:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d668674826e71aecc2c104878453630e44597f66",
          "body": "…entes; cor laranja na doc\n\n- Novas skills de elemento no slide: mira-3d (3D real via Three.js/glTF, sobe servidor + launcher quando ha .glb), mira-qrcode (QR inline gerado localmente) e mira-image (imagem pronta no card). Registradas em agent-sets.js e package.json files.\n- Documentacao em 3 idioma\n[…]\nyml palette custom + extra.css).\n- Doc: criacao de deck passa a ser conversacional via /mira-new (cli, temas, index, uso, README).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: skills mira-3d, mira-qrcode e mira-image; reorganiza menu de Ag…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-14T16:40:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b77460c2bbbe6769bd8ff78bf8e415901f4b91a0",
          "body": "…iner + CI docs) e specs verticais\n\n- banner: tagline \"Metaforas Inteligentes Responsivas e Animadas\"\n- .devcontainer: ambiente isolado com firewall para Claude Code\n- .github/workflows/docs.yml: deploy do MkDocs para o GitHub Pages\n- specs/slides-verticais: HTMLs de referencia do formato 9:16\n- .gitignore: ignora deck local de apresentacao e no_permissions.md\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.18; banner \"Responsivas\"; infra (devconta…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-14T13:30:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "adb75a697320807e9d707357b514b164cece58ec",
          "body": "…as (en/pt/es)\n\n- README reescrito com badges de docs nos 3 idiomas, pipeline, formatos e CLI\n- docs/ com 11 páginas x 3 idiomas (estrutura suffix do plugin i18n)\n- mkdocs.yml (Material, i18n pt/es, mermaid), extra.css, requirements.txt\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: README estilo Reversa + documentação MkDocs Material em 3 idiom…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-14T12:38:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "18069a7f27d7a9cc86923869ce6df470fcdc2264",
          "body": "…ADME) e nova tagline \"Metáforas Inteligentes Recursivas e Animadas\"; bump versao para 0.1.17\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: remove menção a \"D3\" do texto ao usuário (banner/instalação/RE…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-12T18:04:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b2c99bc5bd874f956389153eabe81337184d44f7",
          "body": "…8/203, auto-ajuste de titulo a 2 linhas, fundo #333333, esticao do viewBox em altura) e ferramenta aumentar elementos em X% com distancias -X%; specs do formato vertical; bump versao para 0.1.16\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-vertical: novo padrao 9:16 (so titulo + animacao, canvas alto 12…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-12T17:50:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "16383248be155b83e2d6b4204d28f9ebb424f3d2",
          "body": "…ansitions API (crossfade em file://, sem servidor); bump versao para 0.1.15\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-transition-dissolve: transicao dissolve entre slides via View Tr…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-12T15:26:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5e8a87cc18c2f513788a5d79bc58a70abacb76a4",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.14",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-12T00:51:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d5623eb6dad56c0676b89759b82e71588f644963",
          "body": "…o) com recomendacao de tipo via galeria d3\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-chart: skill de graficos de dados (csv/json/imagem/rascunho a ma…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-12T00:51:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "804a721b46ecfe52a69be95fedb1ea90e3c6d14d",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.13",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-12T00:42:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "51a2c78870fa6053b23ba2e7c1bc60659a2b1e91",
          "body": "… thirds) alem da conversao\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "skills de formato: modo de criacao nativa do zero (vertical, squared,…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T21:13:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "87f4cf8b90b35aa786e785b8fb6fbb59fffe4df0",
          "body": "… .glb fornecido pelo usuario (drone)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-qrcode: brainstorm da skill + slide de teste; mira-3d: teste com…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T20:35:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0b4172d67c16763866f145e63fa7e6ede11f8f8d",
          "body": "…Box H=1200), validada em teste lado a lado\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-vertical: fonte minima obrigatoria 13px renderizados (24 no view…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T20:35:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5adceb4944f0c1f7ce48331e191cba36feed064a",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.12",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T19:31:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f405dae4018c92f71179700833bf0d2f57f6251f",
          "body": "…s/glTF)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-3d: brainstorm da skill + slide de teste com cerebro 3D (Three.j…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T19:31:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3fb69514600230b9d1acdf2055a000de4abe5a27",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.11",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T18:11:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3155d3aaf7e916159c63a25dee858adf120f3299",
          "body": "…recompor quando girar nao basta)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-vertical: animacao maximizada (80-90% da altura + largura util; …",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T18:11:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a35ee993029d3ca54904a2913fc0c88ef35d734d",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.10",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T18:05:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd22ad005a1ceb43e2f3d1291e798d530c3c148d",
          "body": "…ertical, crescer escala, sem corte)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Reforça mira-vertical: reflow profundo obrigatório (horizontal vira v…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T18:05:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "da4421e82b78a99cbac05e27be7435b43fb646e8",
          "body": "Inclui agents/mira-new no pacote publicado (files[]).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.9",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T17:09:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "be8632f52e37c12c7be4dda7dab4767070539349",
          "body": "Skill conversacional que monta decks/<tema>/ a partir de um template, aplica o tema base com cor principal opcional e prepara references/ local. Para no setup e oferece acionar o pipeline. Registrada no PIPELINE_CORE.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adiciona agente mira-new (porta de entrada de novo deck)",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T17:09:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "178a3129a93477732f0b88b9e73958755e94f13e",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versao para 0.1.8",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T11:22:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8d068a3dec4151f5e6e1f9b6665d0b8ecfa5eed2",
          "body": "Deixa de so encolher o slide 16:9 para caber: reescreve a geometria da animacao de cada slide (viewBox retrato, giro de eixo, fluxo horizontal vira topo-base, elipse larga vira alta, comparacao lado a lado vira empilhada). Quadro generalista para a tela atual: largura = largura da tela / 3, altura = altura cheia (calc(100vw/3) x 100vh), em vez de px fixo. Texto, cores, timings e loop intactos.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-vertical: reflow profundo na vertical + dimensao relativa a tela",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T11:20:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a1bfe6e27324e053dfa9045ca989cd97244e5860",
          "body": "…ta livre)\n\nReenquadra o deck na regra dos tercos sem mudar a proporcao: empurra o\nconteudo do slide para as colunas 1+2 e deixa a coluna da direita livre,\npara sobrepor texto ou apresentador na edicao. Cria arquivo -thirds ao\nlado, sem tocar no original. Registrado no core (install/update), no\npackage.json e no README.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adiciona agente mira-thirds (regra dos tercos: animacao em 2/3, direi…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T01:46:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "82f3d0e7e6d2b3fe5f47a633b7814a70da2d9fb3",
          "body": "As skills mira-squared e mira-vertical centralizam cada slide via flex\nna body (align-items), em vez de margin:auto, que era anulado pelo\nPreflight do Tailwind (Play CDN) e prendia o slide a esquerda.\n\nNova variavel --fmt-align permite escolher a posicao: center (padrao),\nflex-start (esquerda) ou flex-end (direita). Bump 0.1.6 -> 0.1.7.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Centraliza slide nas versoes 1x1 e 9:16 por padrao",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T01:11:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a475370a47059ca41f107456bf400a628a8f3f79",
          "body": "Novo agente que transforma a animacao de um slide (ou de todos) na metafora\nvisual do conceito: destila a dinamica, mapeia para uma analogia concreta do\ncotidiano 1 para 1 e anima no padrao do mira-animator (loop interno\nobrigatorio). Substitui a animacao no lugar, mantendo titulo, subtitulo e\npilul\n[…]\nado em PIPELINE_CORE (agent-sets.js), no files do package.json,\nno rotulo do instalador e no README. Bump de versao 0.1.5 -> 0.1.6\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adiciona agente mira-animated-metaphor",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T00:21:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cc6ca97591898ff59f50e81b4590611cbb040433",
          "body": "…ados\n\nO \"mira update\" so reinstalava os agentes congelados em state.agents (da\ninstalacao original), entao agentes lancados depois (mira-size-animator,\nmira-squared, mira-vertical, mira-references) nunca chegavam em projetos\nantigos e seus comandos /slash nao apareciam.\n\nAgora o update mescla state\n[…]\ns para lib/installer/agent-sets.js\n(sem efeitos colaterais), importadas por prompts.js e update.js.\n\nBump de versao 0.1.4 -> 0.1.5\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "update: instala tambem os agentes novos do core em projetos ja instal…",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T00:12:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "81c551f8244795d99d17345f40ab0cfd6c03d06c",
          "body": "Padrao do deck reversa aplicado ao que o Mira gera do zero:\n- base.css: canvas .anim-stage agora height clamp(400px, 60vh, 620px)\n- mira-animator: titulo sem icone (sem icon-hero), no maximo 6 palavras,\n  colado no topo (secao pt-3 pb-6, sem pt-10 no wrapper, mb-2), viewBox 1280x720\n\nDois agentes de\n[…]\nReels, Shorts, Stories, TikTok)\n\nRegistrados em PIPELINE_CORE, no files do package.json e no README.\nBump de versao 0.1.3 -> 0.1.4\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Padrao reversa nos slides + agentes mira-squared e mira-vertical",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-11T00:04:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c297f58bfb10439293e7180ef01d4060b5eaace9",
          "body": "Novo agente que ajusta o quanto cada animacao D3 preenche o palco, numa\nescala de 1 a 10 onde 3/10 e o tamanho que o mira-animator gera por padrao.\nLe o marcador @MIRA:SIZE de cada animacao, reporta o nivel atual e escala\nsomente a composicao dentro do SVG (raios, comprimentos, espacamentos,\nfontes \n[…]\nZE 3/10 --> em cada animacao\n- registrado em PIPELINE_CORE (instalador) e no files do package.json\n- bump de versao 0.1.2 -> 0.1.3\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adiciona skill mira-size-animator (percepcao de tamanho das animacoes)",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-10T23:25:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "285ebbfa625e8be0897a144492c8b00993a5c4fd",
          "body": "Tira a pergunta 7 (caminho de fonte) do instalador: a fonte de conteudo nunca e perguntada na instalacao.\n\nAdiciona a skill /mira-references, que cria slides/<tema>/references/ por tema e inclui automaticamente o material que ja estiver na pasta. Registrada no PIPELINE_CORE e no files do pacote.\n\nBump 0.1.1 -> 0.1.2.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove pergunta de fonte na instalacao e adiciona skill mira-references",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-10T19:55:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b257830d16684cda3ca89f54031fb0c03b92788a",
          "body": "Crava nos 3 esqueletos de deck (mira-templates/decks/) o sistema de navegacao do padrao do canal: barra de progresso no topo, botao flutuante e teclado (setas, PageUp/Down, Home/End, F para tela cheia) rolando secao a secao via scrollIntoView.\n\nDocumenta a passagem de slides como obrigatoria na skil\n[…]\nmove as referencias ao inexistente slides/cap06 e mencoes literais a cap06/cap07 em skills, templates e CSS.\n\nBump 0.1.0 -> 0.1.1.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adiciona sistema de passagem de slides e remove vazamento de cap06/cap07",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-10T19:44:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dd3abc960c1e10bf80e60998c519f13025933b34",
          "body": "Os videos de background (182 MB) sao distribuidos via skill\n/mira-get-videos, nao pelo repositorio.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adiciona videos_header ao .gitignore",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-10T18:47:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "05a8e9881c9e932a3f96465a8ac0e263d11c5340",
          "body": "Troca 18 downloads individuais por um zip unico. Manifesto atualizado\ncom drive_id real. Skill reescrita para baixar, extrair com tar/Expand-Archive\ne limpar o zip. URL do Drive nunca exposta ao usuario.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "mira-get-videos: abordagem zip com drive_id preenchido",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-10T18:40:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "789f87261bef9a41fbe57e7d466f62cd17f350a7",
          "body": "Skill /mira-get-videos baixa os 18 backgrounds de video do Google Drive\npara mira-templates/videos_header/ via curl. Manifesto com drive_ids a\npreencher. Package.json com files granular para excluir videos_header/\n(190 MB -> 88 kB). .npmignore como fallback.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adiciona skill mira-get-videos e exclui videos do pacote npm",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-10T18:27:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a7086f234a9d9669a2daf40a8b941feb25c2d99e",
          "body": "Instalador npx (install/link/sources/new/status/update/uninstall),\npipeline de agents (extract, planner, copywriter, builder, animator,\nvisuals, validator) e templates de temas, slides e decks.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Mira Animator: CLI, agents e templates iniciais",
          "author_name": "sandeco",
          "author_login": null,
          "committed_at": "2026-06-10T18:11:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 6,
      "commits_last_year": 94,
      "latest_release_at": "2026-06-26T21:24:22Z",
      "latest_release_tag": "v0.1.21",
      "releases_from_tags": true,
      "days_since_last_push": 1,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 24,
      "mean_days_between_releases": 3.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "mira-animator",
          "exists": true,
          "license": "PolyForm-Noncommercial-1.0.0",
          "keywords": [
            "slides",
            "presentation",
            "d3",
            "animation",
            "html",
            "ai",
            "claude",
            "agents"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/mira-animator",
          "is_deprecated": false,
          "latest_version": "0.1.46",
          "repository_url": "https://github.com/sandeco/mira-animator",
          "versions_count": 37,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 4264,
          "first_published_at": "2026-06-10T18:53:46.516000Z",
          "latest_published_at": "2026-07-20T18:38:49.757000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 1
        }
      ]
    },
    "popularity": {
      "forks": 44,
      "stars": 135,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-06-14",
            "count": 1
          },
          {
            "date": "2026-06-15",
            "count": 2
          },
          {
            "date": "2026-06-16",
            "count": 4
          },
          {
            "date": "2026-06-17",
            "count": 3
          },
          {
            "date": "2026-06-18",
            "count": 2
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-06-28",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 2
          },
          {
            "date": "2026-07-04",
            "count": 2
          },
          {
            "date": "2026-07-06",
            "count": 1
          },
          {
            "date": "2026-07-07",
            "count": 3
          },
          {
            "date": "2026-07-08",
            "count": 3
          },
          {
            "date": "2026-07-09",
            "count": 1
          },
          {
            "date": "2026-07-10",
            "count": 4
          },
          {
            "date": "2026-07-11",
            "count": 1
          },
          {
            "date": "2026-07-12",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 2
          },
          {
            "date": "2026-07-15",
            "count": 1
          },
          {
            "date": "2026-07-16",
            "count": 2
          },
          {
            "date": "2026-07-17",
            "count": 2
          },
          {
            "date": "2026-07-18",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 44,
        "total_forks": 44
      },
      "star_history": {
        "days": [
          {
            "date": "2026-06-11",
            "count": 4
          },
          {
            "date": "2026-06-12",
            "count": 8
          },
          {
            "date": "2026-06-14",
            "count": 2
          },
          {
            "date": "2026-06-15",
            "count": 10
          },
          {
            "date": "2026-06-16",
            "count": 15
          },
          {
            "date": "2026-06-17",
            "count": 11
          },
          {
            "date": "2026-06-18",
            "count": 7
          },
          {
            "date": "2026-06-19",
            "count": 7
          },
          {
            "date": "2026-06-21",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 2
          },
          {
            "date": "2026-06-25",
            "count": 2
          },
          {
            "date": "2026-06-26",
            "count": 4
          },
          {
            "date": "2026-06-28",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-06-30",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 6
          },
          {
            "date": "2026-07-05",
            "count": 2
          },
          {
            "date": "2026-07-06",
            "count": 3
          },
          {
            "date": "2026-07-07",
            "count": 4
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 4
          },
          {
            "date": "2026-07-10",
            "count": 8
          },
          {
            "date": "2026-07-11",
            "count": 8
          },
          {
            "date": "2026-07-12",
            "count": 5
          },
          {
            "date": "2026-07-13",
            "count": 3
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 4
          },
          {
            "date": "2026-07-16",
            "count": 2
          },
          {
            "date": "2026-07-17",
            "count": 2
          },
          {
            "date": "2026-07-18",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 2
          },
          {
            "date": "2026-07-20",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 135,
        "total_stars": 135
      },
      "open_issues_and_prs": 4
    },
    "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": 93746,
      "source_files_sampled": 41,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "templates/engines/AGENTS.md",
        "templates/engines/CLAUDE.md",
        "templates/engines/GEMINI.md"
      ],
      "agent_instruction_max_bytes": 2348
    },
    "dependencies": {
      "manifests": [
        "docs/requirements.txt",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "chalk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.3.0"
        },
        {
          "name": "inquirer",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.2.0"
        },
        {
          "name": "ora",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.0.0"
        },
        {
          "name": "yoctocolors-cjs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.2"
        }
      ],
      "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": 2,
        "merged_prs": 2,
        "open_issues": 2,
        "closed_ratio": 0,
        "closed_issues": 0,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "sandeco",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/3765602?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": false,
      "ci_workflows": [
        "docs.yml"
      ],
      "has_docs_dir": true,
      "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": 5,
            "reason": "1 out of 2 merged PRs checked by a CI test -- score normalized to 5",
            "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/26 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 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": 9,
            "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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "909ec79bbdd2b0916e83700d145fef2b1cf0a77a",
        "ran_at": "2026-07-21T20:43:49Z",
        "aggregate_score": 3.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/sandeco/mira-animator",
    "host": "github.com",
    "name": "mira-animator",
    "owner": "sandeco"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 51,
      "inputs": {
        "security": 31,
        "vitality": 70,
        "community": 50,
        "governance": 48,
        "engineering": 50
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 70,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "commits_last_year": 94,
              "human_commit_share": 1,
              "days_since_last_push": 1,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "94 commits in the last year",
                "points": 17.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 94
                    }
                  }
                ],
                "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": 88,
            "inputs": {
              "releases_count": 6,
              "latest_release_tag": "v0.1.21",
              "releases_from_tags": true,
              "days_since_latest_release": 24,
              "mean_days_between_releases": 3.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "6 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 24 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 24
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.2
                    }
                  }
                ],
                "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": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "forks": 44,
              "stars": 135,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "window_too_short"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "135 stars",
                "points": 34.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 135
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "44 forks",
                "points": 13.6,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 44
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "at_risk",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 44,
            "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": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "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": 60,
            "inputs": {
              "packages": [
                "mira-animator"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 4264
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,264 downloads/month across npm",
                "points": 48.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4264,
                      "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 48,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 2,
              "closed_issues": 0,
              "issue_closed_ratio": 0,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "0% of issues closed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 0
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2/3 decided PRs merged",
                "points": 25.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 3
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/26 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "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": 74,
            "inputs": {
              "followers": 2357,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "sandeco",
              "public_repos": 78,
              "account_age_days": 4887
            },
            "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": "2,357 followers of sandeco",
                "points": 24.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2357,
                      "login": "sandeco"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "78 public repos, account ~13 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 78
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "mira-animator"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 1
            },
            "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 1 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "37 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 37
                    }
                  }
                ],
                "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": 50,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "has_ci": true,
              "has_tests": false,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "1 out of 2 merged PRs checked by a CI test -- score normalized to 5",
                "points": 10,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 31,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "1 out of 2 merged PRs checked by a CI test -- score normalized to 5",
                "points": 1.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/26 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no 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.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 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": 49,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.968,
              "agent_instruction_files": [
                "templates/engines/AGENTS.md",
                "templates/engines/CLAUDE.md",
                "templates/engines/GEMINI.md"
              ],
              "agent_instruction_max_bytes": 2348
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "templates/engines/AGENTS.md, templates/engines/CLAUDE.md, templates/engines/GEMINI.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "templates/engines/AGENTS.md, templates/engines/CLAUDE.md, templates/engines/GEMINI.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "91 of 94 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 91,
                      "sampled": 94
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "critical",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "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.947,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": 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": "89 of the last 94 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 89,
                      "sampled": 94
                    }
                  }
                ],
                "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 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "primary_language": "HTML",
              "largest_source_bytes": 93746,
              "source_files_sampled": 41,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "HTML without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "HTML"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/41 source files over 60KB",
                "points": 53.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 41,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:mira-animator@0.1.46; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T20:43:55.929403Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sandeco/mira-animator.svg",
  "full_name": "sandeco/mira-animator",
  "license_state": "custom",
  "license_spdx": null
}

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

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

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