Public record
Software health reportschema 0.23.0 · metrics 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 · JavaScriptCustom license★ 135 stars⑂ 44 forkssince Jun 2026View on GitHub ↗

sandeco/mira-animator holds a health index of 51 out of 100, placing it in the Moderate band. It scores highest on Vitality (70/100) and lowest on Security (31/100). It was last updated 1 day ago. A single contributor accounts for most of its recent work.

51
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

51
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

SandecoPersonal account
2,357 followers78 public repossince Mar 2013@sandeco

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
npmmira-animator0.1.464,264371 day agoslidespresentationd3animationhtmlaiclaudeagents

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

70Good · 22% of overall
How it's scored
36/36Push recency — last push 1 days ago
4.2/36Commit cadence — 6/52 weeks with commits
17.8/18Commit volume — 94 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year94
human_commit_share1
days_since_last_push1
active_weeks_last_year6
How it's scored
16.2/27Ships releases — 6 version tags (no GitHub releases)
36/36Release recency — latest release 24 days ago
27/27Release cadence — a release every ~3.2 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count6
latest_release_tagv0.1.21
releases_from_tagsyes
days_since_latest_release24
mean_days_between_releases3.2
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

50Moderate · 18% of overall
How it's scored
34.5/60Stars — 135 stars
13.6/25Forks — 44 forks
0/15Watchers — 2 watchers
Inputs used
forks44
stars135
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonwindow_too_short
How it's scored
22.5/22.5README
16.9/22.5License — license file present, not a recognized license
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
How it's scored
48.4/80Monthly downloads — 4,264 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesmira-animator
dependents
ecosystemsnpm
total_downloads
monthly_downloads4,264
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

48At risk · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
0/46.8Issue resolution — 0% of issues closed
25.5/38.3PR acceptance — 2/3 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/26 approved changesets -- score normalized to 0
Inputs used
merged_prs2
open_issues2
closed_issues0
issue_closed_ratio0
closed_unmerged_prs1
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
24.2/25Owner reach — 2,357 followers of sandeco
25/25Track record — 78 public repos, account ~13 yr old
Inputs used
followers2,357
owner_typeUser
is_verified
owner_loginsandeco
public_repos78
account_age_days4,887
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 1 days ago
20/20Version history — 37 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesmira-animator
ecosystemsnpm
any_deprecatedno
min_days_since_publish1

Engineering Quality

Are baseline engineering and documentation practices in place?

50Moderate · 20% of overall
How it's scored
24/24CI workflows — 1 workflow(s)
0/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
10/20OpenSSF Scorecard: CI-Tests — 1 out of 2 merged PRs checked by a CI test -- score normalized to 5
Inputs used
has_ciyes
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

31At risk · 16% of overall
How it's scored
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.5License — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — no data
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 — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3.1
Excluded from scoring (no data or not applicable): packaging, signed_releases. Remaining weights renormalized.

AI Readiness

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.

49At risk · 0% of overall
How it's scored
45/45Agent instructions — templates/engines/AGENTS.md, templates/engines/CLAUDE.md, templates/engines/GEMINI.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 91 of 94 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.968
agent_instruction_filestemplates/engines/AGENTS.md, templates/engines/CLAUDE.md, templates/engines/GEMINI.md
agent_instruction_max_bytes2,348
How it's scored
0/18One-command bootstrap
0/22Automated tests
0/11Lint / format config
0/11Static type checking
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 89 of the last 94 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
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
How it's scored
0/45Type-checkable code — HTML without a type-check config
53.7/55Manageable file sizes — 1/41 source files over 60KB
Inputs used
primary_languageHTML
largest_source_bytes93,746
source_files_sampled41
oversized_source_files1

Key facts

135GitHub stars
1contributors
94commits, last 12 months
1days since last push
6releases
1bus factor
2open issues
npm, PyPIpackage ecosystems

Data collection 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

More detail

Star and fork history 135 ★ / 44 ⇿
135Stars
44Forks
4Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

025507510012515013544152026-062026-062026-07
Major 0Minor 0Patch 4
OpenSSF Scorecard 3.1 / 10
3.1aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).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/aPackagingpackaging 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/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direct dependencies 4
RegistryPackageVersion constraintManifest
npmchalk^5.3.0package.json
npminquirer^9.2.0package.json
npmora^8.0.0package.json
npmyoctocolors-cjs^2.1.2package.json
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

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

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.23.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.