Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-27 21:52 UTC

basefoundry / base

A local, GitHub-centric operating contract that makes a collection of independent repositories behave like one understandable, verifiably ready workspace for humans and coding agents.

Python · ShellLicencia propia★ 118 estrellas⑂ 14 forksdesde mar 2019Ver en GitHub ↗

basefoundry/base tiene un índice de salud de 66 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (84/100) y la más baja, Sustainability & Governance (44/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

66
global / 100
Moderado

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

Base FoundryOrganización
2 seguidores7 repositorios públicosdesde jun 2026

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Métricas por categoría

Vitalidad

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

84Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
9/36Cadencia de commits — 13/52 semanas con commits
18/18Volumen de commits — 1024 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year1024
human_commit_share1
days_since_last_push0
active_weeks_last_year13
Cómo se puntúa
27/27Publica versiones — 23 versiones publicadas
36/36Recencia de las versiones — última versión hace 10 días
27/27Cadencia de publicación — una versión cada ~3,2 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count23
latest_release_tagv1.7.0
releases_from_tagsno
days_since_latest_release10
mean_days_between_releases3,2
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

58Moderado · 18% del índice global
Cómo se puntúa
33.5/60Estrellas — 118 estrellas
9.3/25Forks — 14 forks
3.9/15Observadores — 6 observadores
Datos de entrada utilizados
forks14
stars118
watchers6
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_template

Sostenibilidad y Gobernanza

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

44En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,999
Cómo se puntúa
45.5/46.8Resolución de issues — 97% de issues cerradas
37.8/38.3Aceptación de PR — 876/886 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs876
open_issues23
closed_issues852
issue_closed_ratio0,974
closed_unmerged_prs10
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
3.4/25Alcance del propietario — 2 seguidores de basefoundry
6.8/25Trayectoria — 7 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers2
owner_typeOrganization
is_verified
owner_loginbasefoundry
public_repos7
account_age_days38

Calidad de Ingeniería

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

84Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 7 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .pylintrc
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

85Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 17 topics
10/10Wiki
Datos de entrada utilizados
topicsautomation, bash-scripts, bootstrap, cli, dev-environment, developer-tools, dotfiles-macos, homebrew, macos, multi-repo, project-orchestration, shell, workspace, workspace-management, zsh, bash, dotfiles
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

58Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
3.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 7
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,7
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages7
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 7 dependencias resueltas con OSV. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

Preparación para IA

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

59Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .github/copilot-instructions.md, AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 89 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,89
agent_instruction_files.github/copilot-instructions.md, AGENTS.md
agent_instruction_max_bytes8831
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .pylintrc
0/11Verificación estática de tipos
0/10Entorno reproducible
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
7/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 7
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — Python sin configuración de verificación de tipos
54.8/55Tamaños de archivo manejables — 1/261 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes76.773
source_files_sampled261
oversized_source_files1

Datos clave

118estrellas de GitHub
2contribuidores
1024commits en los últimos 12 meses
0días desde el último push
23versiones publicadas
1factor bus
23issues abiertas
PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Más detalle

Historial de estrellas y forks 0 ★ / 14 ⇿
0Estrellas
14Forks
23Versiones

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

03581013151422019-032022-112026-07
Mayor 1Menor 11Parche 10

Cada punto abarca 7 días.

OpenSSF Scorecard 4.7 / 10
4.7agregado

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

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
7Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 7
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Todas las dependencias 7

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 0 paquetes directos y 7 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
PyPIbandit1.9.4indirecta
PyPIclick8.4.1indirecta
PyPIpip-audit2.10.1indirecta
PyPIpylint3.3.9indirecta
PyPIpytest9.0.3indirecta
PyPIpyyaml6.0.3indirecta
PyPItomli2.4.1indirecta
Avisos de dependencias 0

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 7 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 0 tienen avisos conocidos, de los cuales 0 son directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "automation",
        "bash-scripts",
        "bootstrap",
        "cli",
        "dev-environment",
        "developer-tools",
        "dotfiles-macos",
        "homebrew",
        "macos",
        "multi-repo",
        "project-orchestration",
        "shell",
        "workspace",
        "workspace-management",
        "zsh",
        "bash",
        "dotfiles"
      ],
      "is_fork": false,
      "size_kb": 4958,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Shell": 1687823,
        "Python": 1904064
      },
      "pushed_at": "2026-07-27T00:42:07Z",
      "created_at": "2019-03-09T23:26:24Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-27T00:42:09Z",
      "description": "A local, GitHub-centric operating contract that makes a collection of independent repositories behave like one understandable, verifiably ready workspace for humans and coding agents.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "Python",
      "significant_languages": [
        "Python",
        "Shell"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Base Foundry",
      "type": "Organization",
      "login": "basefoundry",
      "company": null,
      "location": "United States of America",
      "followers": 2,
      "avatar_url": "https://avatars.githubusercontent.com/u/295026282?v=4",
      "created_at": "2026-06-19T05:48:40Z",
      "is_verified": null,
      "public_repos": 7,
      "account_age_days": 38
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-07-17T06:48:23Z"
        },
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2026-07-05T04:43:59Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-07-04T04:05:19Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-07-02T04:03:51Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-07-01T05:53:20Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-06-28T04:12:14Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-06-24T19:23:57Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-06-21T21:18:26Z"
        },
        {
          "tag": "v1.0.5",
          "kind": "patch",
          "published_at": "2026-06-18T10:29:34Z"
        },
        {
          "tag": "v1.0.4",
          "kind": "patch",
          "published_at": "2026-06-18T01:32:49Z"
        },
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2026-06-17T17:57:15Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-06-16T06:56:44Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-06-15T14:44:23Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-06-14T14:49:20Z"
        },
        {
          "tag": "v0.4.4",
          "kind": "patch",
          "published_at": "2026-06-12T14:06:27Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-06-11T16:33:57Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-06-11T05:25:57Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-06-11T04:01:33Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-06-11T01:24:55Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-06-07T01:34:26Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-05-30T23:41:45Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-05-29T19:13:30Z"
        },
        {
          "tag": "classic-shell-framework",
          "kind": "other",
          "published_at": "2026-05-21T04:47:45Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "061828e87c2b58234ee22a061de6d2ec24afa1db",
          "body": "## Summary\n\n- Make the helper-backed Bash defaults and activated-runtime prompts\nshell-local by atomically assigning `PS1` without its export attribute.\n- Preserve both prompt literals and keep their helper functions private\nto the\n  owning shell.\n- Add real interactive-child regressions, including \n[…]\nns\nwhy it is not applicable.\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Keep Base Bash prompts shell-local (#1769)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-27T00:42:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0cb2b29d3d7228700ee806220c601596fe1b5639",
          "body": "## Summary\n\n- Correct readonly `BASE_HOME` detection by inspecting only the\ndeclaration\n  attribute token, not the variable value.\n- Keep the specific stale-runtime recovery message without appending\n  contradictory generic `update-profile` guidance.\n- Add regressions for writable Intel and Apple Si\n[…]\nns\nwhy it is not applicable.\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Fix false readonly BASE_HOME detection (#1768)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-27T00:32:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "511483388192a94772c073b9ea4cf8cfba678173",
          "body": "…1765)\n\n## Summary\n\n- Add a canonical positioning contract row to `docs/contracts.md`.\n- Guard ten newcomer, contributor, agent, and library-facing surfaces\nagainst reintroducing the retired `workspace control plane` product\nphrase.\n- Require the accepted `local operating contract` thesis and outcom\n[…]\nng train branch. Retarget it to `main` after #1757 and #1760\nare merged. Internal implementation terminology, license text, and\nhistorical assessment references remain intentionally outside the guard.",
          "is_bot": false,
          "headline": "Guard canonical docs against retired positioning terminology drift (#…",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-26T22:42:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e8d70d6aa36a9204f4d850b4f3a595804dc585e9",
          "body": "…s (#1764)\n\n## Summary\n\n- Apply `Status:` and `Last reviewed:` metadata to the eight undated\nCore Documents.\n- Refresh the Tool Boundaries evidence date.\n- Add `output-formats.md` to the complete Core Documents index.\n- Keep this PR stacked on the positioning migration so the shared docs\nindex remai\n[…]\n documentation metadata and indexing only.\n\n## Notes\n\nThis draft targets `documentation/1757-20260725-positioning-migration`\nas the preceding train branch. Retarget it to `main` after #1757 is\nmerged.",
          "is_bot": false,
          "headline": "Standardize Core Document maintenance headers and index output format…",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-26T22:41:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3fede726faffa8fef62b726aa8f8072565f46e4",
          "body": "## Summary\n\n- Re-review the product requirements and product assessment against Base\n1.7.0 and current Unreleased evidence.\n- Update both maintenance headers to 2026-07-25 and `1.7.0 +\nUnreleased`.\n- Record the shipped readiness, handoff, inspection, trust, and\nissue-readiness improvements without c\n[…]\nt review only.\n\n## Notes\n\nThe review separates shipped `workspace agent-brief` evidence from the\nstill-planned issue-oriented handoff bundle and keeps broader\nplatform/adoption claims evidence-backed.",
          "is_bot": false,
          "headline": "Review product requirements and assessment for 1.7.0 (#1763)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-26T22:39:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f39c3412a6bd23bea87cda0a7e931c197d5335ee",
          "body": "…e (#1762)\n\n## Summary\n\n- Replace stale product-introduction language across the ten\nreview-identified documentation and guidance surfaces.\n- Align newcomer, contributor, agent, Copilot, and standalone-library\nexplanations with Base's local operating contract for deterministic\nreadiness and handoff.\n[…]\nion is intentionally semantic rather than a global\nreplacement. Internal implementation ownership language, license text,\ntests, and historical assessment references remain outside this issue's\nscope.",
          "is_bot": false,
          "headline": "Complete local operating contract positioning across docs and guidanc…",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-26T22:36:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1260cd1a7e8d80add03d201b22c11854947972a9",
          "body": "Fixes #1756",
          "is_bot": false,
          "headline": "Remove legacy basectl ci command (#1758)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-26T02:47:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c74fb75a8698abcd3f90828bc94b0b0dac9eb24",
          "body": "## Summary\n\n- Remove `--verbose-wrapper` from the public `basectl` wrapper surface\nnow that `--debug-wrapper` is the single reusable-layer DEBUG control.\n- Reject the removed option before runtime initialization with status 2\nand a migration hint to `--debug-wrapper`.\n- Honor `--` as the wrapper-opt\n[…]\nns\nwhy it is not applicable.\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Remove basectl --verbose-wrapper option (#1755)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-26T01:10:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3240de510f51b1d338da144b1da57f8377f02fca",
          "body": "## Summary\n\n- pin all five Base CI checkouts to the peeled base-bash-libs v1.4.0\nrelease commit\n- update the workflow contract, sibling fixture, documentation, and\nchangelog\n- preserve the runtime compatibility floor at v1.3.0\n\n## Validation\n\n- focused workflow and documentation tests: 44 passed\n- `\n[…]\npin update.\n\n`.ai-context` is unchanged because this dependency pin does not alter\nrepository\ntopology or contributor process.\n\nRelease commit:\n`2c5ef2c3a9edfbe2cf68d0645be65b920255abff`\n\nCloses #1752",
          "is_bot": false,
          "headline": "Pin CI to base-bash-libs v1.4.0 (#1753)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-25T23:40:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b231b38f84532db90ac1dce39a8ffdb6af212f4e",
          "body": "## Summary\n\n- Return the issue numbers added during repository Project backfill.\n- Report deterministic issue-number output from `basectl repo\nconfigure`.\n- Make the no-op case explicit when the Project is already up to date.\n- Add focused coverage for populated and empty backfills.\n\n## Why\n\nThe pre\n[…]\nonment-dependent `basectl check` failures.\n\n## AI context\n\nNo `.ai-context/` update is needed; this changes command observability\nwithout changing the product shape or workflow contract.\n\nCloses #1750",
          "is_bot": false,
          "headline": "Report issue numbers during Project backfill (#1751)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-25T22:38:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd1768898e288ed307422314ecbfef58531e5876",
          "body": "## Summary\n- replace basectl-specific missing-dependency guidance with standalone\npip installation instructions\n- preserve caller-provided raw command names in primary history records\nand pass basectl explicitly from the Base call site\n- restrict Base command display normalization to an explicit com\n[…]\nable\nlogging\n\n## Validation\n- PYTHONPATH=lib/python:cli/python\n/Users/rameshhp/.base.d/base/.venv/bin/python -m pytest -q\n- 1050 passed, 1 skipped, 251 subtests passed\n- git diff --check\n\nCloses #1746",
          "is_bot": false,
          "headline": "Remove Base-specific assumptions from base_cli standalone behavior",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-23T23:29:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6d8f19afa402a6be0218e410c913032c22a8ea56",
          "body": "## Summary\n\n- Re-export command filters, command protocol helpers, and user\nconfiguration types from `base_cli`.\n- Add explicit `__all__` declarations for the public\ncommand/filter/protocol/history surfaces.\n- Add entry-point docstrings for `App`, `Context`, and `run_app`.\n- Document the supported f\n[…]\ndation\n\n- Focused public API/protocol tests: 63 passed, 4 subtests passed.\n- Full Python suite: 1050 passed, 1 skipped, 251 subtests passed.\n- Focused Pylint: clean.\n- `git diff --check`.\n\nFixes #1745",
          "is_bot": false,
          "headline": "Define and stabilize base_cli public API exports and docs",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-23T23:20:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9099354f878a7240d3a2d93faeeffde410de3bce",
          "body": "…tions\n\n## Summary\n\n- Move monorepo-only Python standards, public-command lifecycle, and\nexit-code adoption checks to the top-level `tests/` suite.\n- Move Bash completion and runtime protocol integration checks out of\nthe installable `base_cli` test package.\n- Remove checkout-derived `BASE_HOME` val\n[…]\norepo.\n\n## Validation\n\n- Focused package and checkout-contract tests: 21 passed, 4 subtests\npassed.\n- Full Python suite: 1047 passed, 1 skipped, 251 subtests passed.\n- `git diff --check`.\n\nFixes #1743",
          "is_bot": false,
          "headline": "Make base_cli tests valid for source checkouts and installed distribu…",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-23T23:20:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "375e9a5aff35d2c9b9c3fcbb1f831cb613c17536",
          "body": "## Summary\n\n- Read the installed Homebrew Base version from structured `brew info\n--json=v2 --installed` output before and after `brew upgrade\nbasefoundry/base/base`.\n- Run `basectl setup` only when the installed Base version changes.\n- Skip setup with an explicit log when Homebrew leaves Base at th\n[…]\nytest\ntests/test_base_cli_docs.py tests/test_docs_version.py`\n- `git diff --check`\n- live read-only probe: `base_update_homebrew_installed_version\nbasefoundry/base/base` returned `1.7.0`\n\nCloses #1739",
          "is_bot": false,
          "headline": "Skip setup on unchanged Homebrew Base version (#1740)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-23T22:15:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d07a6f268df63f9808f8401de6643cf0f27140f2",
          "body": "## Summary\n\n- Skip basectl setup <project> when the Git/source update path leaves\nthe checkout at the same revision.\n- Keep setup execution for changed Git revisions and leave the\nHomebrew-managed update path unchanged.\n- Update help, dry-run messaging, README docs, and focused update tests\nto descr\n[…]\nmands/basectl/tests/update.bats\n- bash -n cli/bash/commands/basectl/subcommands/update.sh\n- shellcheck --severity=error\ncli/bash/commands/basectl/subcommands/update.sh\n- git diff --check\n\nCloses #1736",
          "is_bot": false,
          "headline": "Skip setup on no-op Git updates (#1738)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-23T21:57:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c934ef485b06e127f84c3342f2f048c08f1c39fd",
          "body": "## Summary\n\n- Clear inherited BASE_CACHE_DIR and BASE_CLI runtime, history, project,\nand display context before Base test processes start.\n- Prevent basectl test base from making pytest fixtures resolve the\nparent Base invocation or its run bundle.\n- Add regression coverage proving the scrub applies\n[…]\nectly requires explicit\napproval for that worktree; no trust state was changed.\n\n## AI context\n\n- No .ai-context update needed; this is an internal test-runner\nenvironment isolation fix.\n\nCloses #1734",
          "is_bot": false,
          "headline": "Clear inherited context in Base test runner (#1735)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-22T23:47:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08d324ab017de974320ac9ceb24435714f0d7c0c",
          "body": "## Summary\n\n- Add an opt-in process runner mode that captures and logs command\noutput without echoing it directly to the terminal.\n- Use that mode for setup-time mise install so the success line is not\nprinted twice.\n- Preserve captured stdout and stderr for failure diagnostics and leave\nother comma\n[…]\n gate requires an explicit trust approval for the new worktree; no\ntrust state was changed.\n\n## AI context\n\n- No .ai-context update needed; this is an internal setup output\nbehavior fix.\n\nCloses #1732",
          "is_bot": false,
          "headline": "Suppress duplicate mise setup output (#1733)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-22T23:29:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ff93a884444fb710787c0ea4e35d165a0413410",
          "body": "Fixes inconsistent color handling between Bash and Python basectl logs.",
          "is_bot": false,
          "headline": "Color all basectl log output with --color",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-22T23:11:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b795a26feea95c92d36436de423f040cc25baf0",
          "body": "## Summary\n\n- scope `BASE_PROJECT_VENV_DIR` overrides to an unbound shell or the\ncurrently active project\n- fall back to resolved route metadata when an inherited override\nbelongs to another project\n- use the same ownership predicate for missing-venv recovery guidance\n- add helper and public `basect\n[…]\nass.\n- [x] Bug fixes include regression proof.\n- [x] Documentation impact was evaluated.\n- [x] AI context impact was evaluated.\n- [x] PR includes `Fixes #1728`.\n- [x] Demo Impact is explicitly stated.",
          "is_bot": false,
          "headline": "Scope project venv overrides to the active project (#1729)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-21T18:50:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ee0d653c12ceb2454a2d43d80b023671475aaa3",
          "body": "## Summary\n\n- add failed-run coverage for default temp cleanup and explicit\nretention\n- document the per-run temporary-data contract in the observability\nguide\n- keep run metadata, history, and the primary log available in both\nmodes\n\n## Why\n\nThe retention implementation is already on `main`; this P\n[…]\n should move it\nto `Done`.\n- `.ai-context/` unchanged: this is completion coverage and\ndocumentation for an\nalready-shipped runtime contract, with no new product or architecture\ndecision.\n\nFixes #1685",
          "is_bot": false,
          "headline": "Complete temporary run retention coverage (#1727)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-21T13:52:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "410164698c9cd51b07004a9b72fa321e588f241d",
          "body": "## Summary\n\n- derive `Fix:` indentation from the rendered doctor status prefix in\nboth Bash and Python paths\n- align colored and plain project findings under the finding ID column\n- add regression coverage for colored and plain `BASE-H001` output\n\nFixes #1725\n\n## Validation\n\n- `python -m pytest -q c\n[…]\ni/bash/commands/basectl/tests/ci.bats` (41 passed)\n- `bats -t tests/integration/base_workflows.bats` (7 passed)\n- `shellcheck` and `bash -n` checks passed\n\nOutput-only polish; AI context is unchanged.",
          "is_bot": false,
          "headline": "Align doctor Fix continuations with finding IDs (#1726)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-21T13:30:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "28b331207230b5c235cc5b89c98039509ec9bf87",
          "body": "Tighten doctor text spacing, fix indentation, and INFO summary logging.",
          "is_bot": false,
          "headline": "Tighten basectl doctor text formatting",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-21T13:07:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11fad02251dfbaa41e0968511d06d275d488a092",
          "body": "Fixes #1719",
          "is_bot": false,
          "headline": "Unify basectl doctor text output",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-21T06:04:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05831a52ae1a5e743a58cb30803791911fdbde88",
          "body": "Make basectl history command filters match the logs command-filter contract.",
          "is_bot": false,
          "headline": "Support comma-separated history command filters",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-21T05:28:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "935b3b22a82d00c47af96b6ff590974909d10fcf",
          "body": "Clarify basectl logs action conflicts and make --latest guidance actionable.",
          "is_bot": false,
          "headline": "Clarify basectl logs action conflicts",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-21T04:54:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18c6201da565225d201118f72e30804c55884516",
          "body": "Fixes #1714",
          "is_bot": false,
          "headline": "Clarify basectl check remediation guidance",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T23:13:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c457f77bfebf5de3586e44d4035cfd1afbf20a16",
          "body": "## Summary\n- accept comma-separated OR command filters for `basectl logs --command`\n- replace `--path` with `--latest` and rename `logs last` to `logs\nlast-failed`\n- update Bash/Zsh completions, help, docs, changelog, and focused\nregression coverage\n\nCloses #1713\n\n## Validation\n- `PYTHONPATH=cli/pyt\n[…]\nhhp/work/base-bash-libs/lib/bash bats -t\nlib/shell/completions/tests/completions.bats` (31 passed)\n- documentation/contract pytest selection (89 passed)\n- `bash -n`, ShellCheck, and `git diff --check`",
          "is_bot": false,
          "headline": "Refine basectl logs filtering and latest-failure UX",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T22:33:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3ca30c9b7847d3a1475627f97ab9974c0e18485",
          "body": "Fixes #1709",
          "is_bot": false,
          "headline": "Align history and logs terminal tables (#1710)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T21:44:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa0368fb8d2ff1a4195ff185602844b0d3719e5d",
          "body": "Fixes #1708",
          "is_bot": false,
          "headline": "Render check errors at error severity (#1711)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T21:20:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3ba0bef66a3cfa0039c7bf96108e5eddbb8416a",
          "body": "Fixes #1707",
          "is_bot": false,
          "headline": "Finalize activate run history (#1712)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T08:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c9f4be7f3e28aeae1f98fb15a7998d7632a897e",
          "body": "## Summary\n- make superseded-PR close/cleanup an explicit tool-independent rule for\nagents and contributors\n- align AGENTS.md, skills.md, AI context, Copilot guidance, and detailed\nGitHub workflow docs\n- add contract and workflow validation for required safety and cleanup\nlanguage\n\nCloses #1704\n\n## Validation\n- /Users/rameshhp/.base.d/base/.venv/bin/python -m pytest\ntests/test_contract_hardening.py tests/test_github_workflows.py\ntests/test_bootstrap_docs.py -q\n- git diff --check",
          "is_bot": false,
          "headline": "Document superseded PR cleanup for AI workflows",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T06:36:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cb5d3716ec6550a93242f6ef83032cb2f409a40",
          "body": "## Summary\n\n- print each ordinary unmerged local branch with the reason it was\nretained\n- print each ordinary unmerged GitHub branch with its exact branch name\nand retention reason\n- preserve the existing summary counters and fail-closed distinction\nbetween an unmerged result and a GitHub verificati\n[…]\n] Bug/UX behavior has regression coverage.\n- [x] AI context does not need updating because the command boundary is\nunchanged.\n- [x] PR includes `Fixes #1703`.\n- [x] `Demo Impact` is explicitly `None.`",
          "is_bot": false,
          "headline": "Show branch names when prune skips unmerged refs (#1705)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T06:23:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f8f2f7b676a9b995dd845966abefbf2646d36594",
          "body": "## Summary\n\n- preserve the merged-PR lookup's three states so a successful zero\nresult remains distinct from an unavailable or failed GitHub query\n- route failed lookups through the shared GitHub wrapper, retain every\nunverified branch or worktree, count the incomplete scan as failed, and\nreturn a n\n[…]\nns\nwhy it is not applicable.\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Report prune verification failures (#1702)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T04:45:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ab58124cc8043133d8fa5d5f814f8c9430008b34",
          "body": "## Summary\n- document the TTY-aware text default, stable row ordering,\nstructured-output guarantees, and format exceptions\n- complete Bash and Zsh `--format` value completion for migrated reports\n- add completion regression coverage for public and command-specific\nformats\n\nCloses #1695\n\nDepends on #\n[…]\nats\ncli/bash/commands/basectl/tests/history.bats\ncli/bash/commands/basectl/tests/logs.bats\ncli/bash/commands/basectl/tests/trust.bats\ncli/bash/commands/basectl/tests/release.bats`\n- `git diff --check`",
          "is_bot": false,
          "headline": "Document and complete public output formats (#1701)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T04:19:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "74d55b8b4d96f4127abce75f50af9df3125513ff",
          "body": "Closes #1694\n\n## Summary\n- migrate workspace reports, history, logs, trust, and release checks to\nthe shared output contract\n- add YAML/CSV/TSV/JSON output while preserving existing JSON envelopes\n- make text output TTY-aware and update build/run listing adapters and\nhelp\n\n## Validation\n- 207 focused Python tests passed (27 subtests)\n- 7 shared renderer tests passed\n- 54 focused BATS tests passed\n- pylint and git diff --check passed",
          "is_bot": false,
          "headline": "Migrate read-only reports to shared output formats (#1700)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T03:55:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8625226f9ad6fb6d956e4ea00fc7664989406bb",
          "body": "## Summary\n- route projects list through the shared output renderer\n- show a table with a summary on terminals and headerless TSV when\nredirected\n- add explicit CSV, TSV, YAML, and JSON support while preserving the\nexisting JSON shape\n- update help, tests, and output-format documentation\n\n## Validation\n- focused projects-list pytest\n- focused projects-list BATS suite\n- shared renderer plus projects-list pytest\n- git diff --check\n\nCloses #1693",
          "is_bot": false,
          "headline": "Make projects list format-complete and TTY-aware (#1697)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T02:33:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "733b657af31a459e2e635b3a37975a26cbb83064",
          "body": "## Summary\n- add shared TTY-aware text, CSV, TSV, YAML, and JSON rendering helpers\n- keep delimited output headerless and diagnostics separate from stdout\n- document the shared contract and cover resolution, quoting, empty\noutput, and structured serialization\n\n## Validation\n- focused output pytest\n- base_cli unittest suite\n- git diff --check\n\nCloses #1692",
          "is_bot": false,
          "headline": "Add shared basectl output-format renderer (#1696)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-20T02:11:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d89ada81a99de1d80e591b7361b3be20c599a73",
          "body": "Fixes #1690",
          "is_bot": false,
          "headline": "Prevent persisted run history for unknown commands",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-19T21:38:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f297bc8f0b4f0272fee51489b3c1ed6c3ee0ba59",
          "body": "## Summary\n- add command/project labels to run-bundle directory names while\npreserving canonical run IDs\n- make log discovery and metadata updates read canonical IDs from\n`run.json`\n- document and test the readable layout\n\n## Validation\n- focused Python tests: 38 passed\n- focused runtime-dispatch Bats tests: 22 passed\n- touched-file Pylint\n\n## Issue\nCloses #1684",
          "is_bot": false,
          "headline": "Make run bundle directories human-readable (#1686)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-19T21:07:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14da8ac957cdd449ae065d212d0b80b1bc65ed27",
          "body": "## Summary\n- add basectl gh auth status for safe credential diagnostics\n- add basectl gh auth refresh with repeatable scope selection and\nclipboard support\n- detect GH_TOKEN/GITHUB_TOKEN precedence without reading or persisting\ntoken values\n- distinguish network failures from unavailable login and a\n[…]\n passing\n- zsh -n completion validation passing\n- ShellCheck warning-level validation passing\n- git diff --check passing\n- authenticated CLI smoke test for basectl gh auth status passing\n\nCloses #1688",
          "is_bot": false,
          "headline": "Add basectl GitHub auth status and refresh workflow (#1689)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-19T21:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a05b1af20531f92a408fcd1efb62400d3940d0d",
          "body": "## Summary: one run ID, one run.json, one logs/primary.log, and one\npublic history row per Base invocation. ## Validation: full Base Python\nand Bats suites; isolated check smoke test. ## Issue: Closes #1682; Refs\nbasefoundry/base-bash-libs#185.",
          "is_bot": false,
          "headline": "Use one run ID and one primary diagnostic log per invocation (#1683)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-18T23:25:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95304bc147f0393505c4bb3e694c2853ac44fa63",
          "body": "## Summary\\n\\n- retain project, manifest, command, and parent metadata\nin finalized run.json\\n- make run metadata and shell-created primary\nlogs private (0600)\\n- emit UTC-marked Python CLI log timestamps and\nUTC-based run IDs\\n- document the metadata, timestamp, and permission\ncontract\\n- add regre\n[…]\ntimestamps\\n\\n## Validation\\n\\n- 1,016 Python tests\npassed, 1 skipped\\n- 798 BATS tests passed\\n- focused setup smoke\npassed\\n- pylint, ShellCheck, bash -n, and git diff --check\npassed\\n\\nCloses #1680",
          "is_bot": false,
          "headline": "Harden runtime bundle metadata and logs (#1681)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-18T19:56:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "79d31aff26366e171230c39805641cd95d4d6adf",
          "body": "## Summary\n\n- implement the clean-slate owner-aware cache layout for Base and\nBase-compliant projects\n- add run-oriented bundles with `run.json`, primary logs, internal child\nlogs, and checkout-isolated project roots\n- move history and project discovery caches under the Base namespace\n- update logs,\n[…]\nd documentation\n\nCloses #1678\n\n## Validation\n\n- `./bin/base-test` Python suite: 1014 passed, 1 skipped\n- full shell/Bats suite: 797 passed\n- `git diff --check`\n- `shellcheck` on changed Bash launchers",
          "is_bot": false,
          "headline": "Implement owner-aware runtime bundles (#1679)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-18T19:19:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9a5255523d1a06db0707b1cca2850d8f75dbd91b",
          "body": "Add chronological ordering and bounded time filters to history. Fixes #1676.",
          "is_bot": false,
          "headline": "Add history ordering and time filters (#1677)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-18T17:54:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9adf09ab9307d4fc3b8a65520f41ca61fece503e",
          "body": "Keep delegated history internal, preserve onboarding project context, and add explicit local-time rendering. Fixes #1673.",
          "is_bot": false,
          "headline": "Fix recursive history scope and local time display (#1675)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-18T03:34:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "808108aeea3f2fa4766ead0fe30a0cf3086c4518",
          "body": "Fixes #1671",
          "is_bot": false,
          "headline": "Make command history user-facing while retaining internal trace",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-18T02:41:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68fd6e0e836dc2f4a41158e686fac9fc9b5230e9",
          "body": "Fixes #1669\n\n## Summary\n\n- add a shared `Context.bind_project()` API for invocation history\nattribution\n- bind explicit targets in release, PR policy, trust, and export-context\nhandlers\n- preserve the existing setup and projects fixes while recording the\nselected project name\n- add regressions that \n[…]\n Validation\n\n- focused Python tests: 239 passed, 42 subtests passed\n- full Python suite: 1,002 passed, 1 skipped\n- full shell/Bats suite: 796 passed\n- focused pylint: clean\n- `git diff --check`: clean",
          "is_bot": false,
          "headline": "Bind project context across all project-targeting handlers (#1670)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-18T02:06:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c1b161e513ee8ca42d30519baa69fd0be4847bf",
          "body": "Fixes #1667",
          "is_bot": false,
          "headline": "Populate project metadata in history entries (#1668)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-18T01:37:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cef40edea8b2acf440ad94247f86b2d7faede21",
          "body": "Fixes #1664",
          "is_bot": false,
          "headline": "Show valid --format choices in workspace command help (#1666)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-17T18:16:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d39e1f63b8fc74b13784ae1b8394bcd2c0d6d549",
          "body": "Fixes #1663",
          "is_bot": false,
          "headline": "Align workspace status text columns for shell-only projects (#1665)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-17T17:44:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4df0baf100185a7d5f60bc902d413ca5c34655b",
          "body": "## Summary\n\n- prepare the repository metadata and documentation for Base v1.7.0\n- bind the release to the merged runtime compatibility floor for\n`base-bash-libs` 1.3.0 or a compatible later 1.x release\n- keep the existing CI exact SHA pin for the published `base-bash-libs`\nv1.3.0 commit\n\n## Release \n[…]\nheck`\n- `tests/test_docs_version.py`\n\n## Follow-up\n\nAfter merge, run the release readiness check and dry-run, publish the\nGitHub\nrelease, then update and bottle the Homebrew tap formula.\n\nCloses #1600",
          "is_bot": false,
          "headline": "Prepare Base v1.7.0 release (#1662)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-17T06:46:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "87da86f2cebf76b6f5f08e2ae08fcb4255acdd0f",
          "body": "Closes #1659",
          "is_bot": false,
          "headline": "Require compatible base-bash-libs runtime",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-17T06:34:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a56866c02213016884220a603cb01f7e96a0cc7",
          "body": "## Summary\n\n- normalize project selection for `run`, `build`, `test`, and `demo`:\nexplicit `--project`, compatible positional project, nearest manifest,\nthen a controlled error\n- let current-project commands omit repetitive project names while\npreserving registered-project collision precedence\n- add\n[…]\nassed\n- full 794-test BATS suite passed\n- Bash/Zsh syntax, ShellCheck, Pylint, and `git diff --check` passed\n- real list JSON smoke test and independent completion/security review\npassed\n\nCloses #1647",
          "is_bot": false,
          "headline": "Normalize current-project resolution and completion (#1658)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T21:58:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7677c32765e79f1ab3fae53f510df0dab296bc15",
          "body": "## Summary\n\n- treat project Python as an explicit manifest contract (`python:` or\n`python-package`)\n- run shell-only setup, check, and doctor work through Base's own Python\nruntime without creating a project `.venv`\n- report shell-only workspace environments as `not_applicable` while\npreserving expl\n[…]\nt\n- full 785-test BATS suite passed\n- Pylint passed for touched Python modules\n- Bash syntax passed; `git diff --check` passed\n- independent compatibility review found no material issues\n\nCloses #1649",
          "is_bot": false,
          "headline": "Keep shell-only projects healthy without a project venv (#1657)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T21:45:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "22e769146fd2229bb5e73650a12ca581d90122c6",
          "body": "## Summary\n\n- add the stable v1 inspection envelope to `repo check`, `release\ncheck`, `gh issue readiness`, and `gh branch stale`\n- preserve text defaults and exit policy while returning controlled JSON\nfor usage, environment, and upstream failures\n- keep JSON stdout machine-clean with valid UTF-8 h\n[…]\ns passed, 1 skipped\n  - 780 BATS tests passed\n- focused inspection/help/completion gate\n- inspection contract runner\n- Pylint, ShellCheck warning+, Bash/Zsh syntax, and `git diff --check`\n\nFixes #1646",
          "is_bot": false,
          "headline": "Standardize JSON for basectl inspection commands (#1656)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T21:32:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "594e15a1bd53f6c09e7c031ee9344f4d4bd4345f",
          "body": "## Summary\n\n- give documented public leaves focused help and make nested `basectl\nhelp` equivalent\n- reject trailing arguments for exact commands and keep private Python\nruntime flags out of public help\n- align Bash and Zsh command, positional, and option completion with the\nselected leaf\n- regroup \n[…]\n  - 969 Python tests passed, 1 skipped\n  - 768 BATS tests passed\n- focused help/completion matrix: 122 BATS tests passed\n- `bash -n`, `zsh -n`, ShellCheck warning+, and `git diff --check`\n\nFixes #1645",
          "is_bot": false,
          "headline": "Close basectl help and completion parity gaps (#1655)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T21:16:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ded2117bef67f3baadae117d3fdf11c76117c9e5",
          "body": "## Summary\n\n- replace the independent `basectl ci` parser with a thin dispatch that\nprepends `--ci` and forwards every remaining argument to canonical\nsetup, check, or doctor handling\n- preserve optional-project behavior, canonical help and validation,\ncommand-specific options, and delegated exit st\n[…]\nns\nwhy it is not applicable.\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Restore basectl ci compatibility alias parity (#1654)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T20:42:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c410f19ef7d503504e3c8b282f5ce904164ab492",
          "body": "## Summary\n\n- forward `basectl onboard --yes` to setup so Ubuntu/Debian package\nconsent is genuinely unattended\n- add a read-only workspace trust-status step that never grants approval\nand filters manifests without executable command surfaces\n- make fresh and changed trust states show surface-specif\n[…]\nns\nwhy it is not applicable.\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Fix trust-aware onboarding and unattended setup handoff (#1653)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T20:22:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "047848a9fb4996b7d402a502435c3691c0c7ea75",
          "body": "## Summary\n\n- require an explicit relative or absolute path before `basectl` enters\nscript mode\n- dispatch built-in control commands before considering same-named local\nfiles\n- return a focused explicit-path hint for unknown bare script names\n- document the invocation boundary and add collision/path\n[…]\nsed runtime/help BATS: 34 passed\n- Bash syntax and ShellCheck: passed\n- contract suite: passed\n- full `./bin/base-test`: 962 Python passed, 1 skipped; 736 BATS passed\n- `git diff --check`\n\nFixes #1643",
          "is_bot": false,
          "headline": "Prevent local files from shadowing basectl commands (#1652)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T19:38:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "586015a8d7ca777df22637cdb64e2248c6b5d0ef",
          "body": "Closes #1650",
          "is_bot": false,
          "headline": "Pin CI to base-bash-libs v1.3.0 (#1651)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T18:20:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b09bb0b3f8ccadfedb169049681f946f5d0f76ec",
          "body": "## Summary\n\n- Add opt-in `--release` support to `basectl repo init`, `repo\nconfigure`, and `repo check`.\n- Generate a generic `release:` contract and agent-facing\n`docs/release-process.md` for repositories that publish versioned\nartifacts.\n- Preserve existing release declarations and process guides,\n[…]\nly.\n- `.ai-context/WORKFLOWS.md` documents the new command path.\n- Existing release metadata is left unchanged; `basectl release` remains\nthe guarded publishing surface.\n\nCloses #1639\nRelates to #1620",
          "is_bot": false,
          "headline": "Standardize repository release contracts (#1642)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T17:49:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3f2617fb3b15522053d4f277577440f48569ad64",
          "body": "## Summary\n- Clarify when Base should keep using Bash `source`.\n- Document that stdlib `import` is for standalone stdlib consumers,\nwhile Base command code uses `import_base_lib` for reusable\n`base-bash-libs` modules.\n\n## Issue\nCloses #1640\n\n## Validation\n- `git diff --check`\n\n## Demo Impact\nNone. Documentation-only change.",
          "is_bot": false,
          "headline": "Clarify Bash library import conventions (#1641)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T17:14:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57f1d7fdfcc5393a8b705e8cdd94b5b1fcf97e0f",
          "body": "## Summary\n\n- import `lib/bash/git/lib_git.sh` alongside the GitHub helpers in Base\nGH and repo consumers\n- migrate generic default-branch, worktree, upstream, merge, and remote\ncalls to canonical `git_*` APIs\n- keep Base's `base_gh_*` command-facing wrappers and behavior unchanged\n- update focused \n[…]\nch-worktree.bats\ncli/bash/commands/basectl/tests/gh.bats\ncli/bash/commands/basectl/tests/repo.bats`\n- `./bin/base-test` (962 Python tests passed, 1 skipped; 731 BATS tests\npassed)\n- `git diff --check`",
          "is_bot": false,
          "headline": "Migrate Base to canonical Git helpers (#1638)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-16T05:25:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ba92dcbb253692807d4071d94cb4d20e30fb8f55",
          "body": "## Summary\n\n- add `basectl workspace agent-brief` with concise text and stable JSON\nv1 output\n- report expected, optional, unmanaged, and local-only repositories with\nstatic baseline, guidance, AI-context, environment, and validation\nevidence\n- preserve the trust boundary by never executing reposito\n[…]\nns\nwhy it is not applicable.\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Add workspace agent brief from workspace manifests (#1635)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T17:59:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c712184e26604eadb8fd530b41ce65bd1d17a6f6",
          "body": "## Summary\n- replace hand-rolled whitespace trimming in\n`base_repo_strip_config_value` with `str_trim`\n- add a repo clone config regression that covers whitespace plus\ntrailing comments\n\n## Validation\n- `env BASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nbats --filter 'trims user co\n[…]\nameshhp/work/base-bash-libs/lib/bash bats\ncli/bash/commands/basectl/tests/repo.bats`\\n- `shellcheck\n--severity=error cli/bash/commands/basectl/subcommands/repo.sh`\\n- `git\ndiff --check`\\n\\nFixes #1633",
          "is_bot": false,
          "headline": "Use str_trim for repo config parsing (#1634)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T17:27:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "079bc08e3b09bbe1e894d0fb39cb396ef73ce38a",
          "body": "## Summary\n- list the current `base-bash-libs` reusable module surface in Base docs\n- update companion import examples to include current helpers\n- refresh short helper references that still implied only the older\n`file`/`git` pair\n\n## Validation\n- `git diff --check`\n\nFixes #1631",
          "is_bot": false,
          "headline": "Refresh Base Bash library docs (#1632)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T17:20:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e42d11662848c448817445ed1c7d2dcf2d497624",
          "body": "## Summary\n\n- validate branch categories against the referenced issue label in Base\nCLI paths\n- install a trusted PR workflow that enforces the same semantic policy\nfor raw Git, forks, and other AI tools\n- propagate the policy through generated repository guidance and make\nthe trusted status require\n[…]\nquest_target without checking out or\nexecuting pull-request code; it reads GitHub API metadata and writes\ncommit statuses only.\n\n## Demo\n\nNot applicable; this is repository policy and CLI enforcement.",
          "is_bot": false,
          "headline": "Enforce branch category against referenced issues (#1630)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T07:05:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6803aee520ecf9bad248b71af5e034c4d6e3089",
          "body": "…ed protocol (#1628)\n\n## Summary\n\n- Add a versioned, named, typed protocol shared by Python producers and\nBash/Zsh consumers.\n- Encode UTF-8 safely across tabs, newlines, and control characters,\nwith explicit nulls, canonical bounded record counts, and strict\nmalformed-input rejection.\n- Migrate eve\n[…]\nchitecture boundary change.)\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Replace tab-delimited Python-to-Bash command metadata with a structur…",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T05:42:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff82e3478d68bfa770d3d55c0d4ac81c84f8056a",
          "body": "…o managers (#1629)\n\n## Summary\n\n- Replace the stale adjacent-tool model with explicit own, delegate,\nintegrate, overlap, and do-not-expand decisions.\n- Ground the boundary guidance in current official capabilities for mise\nbootstrap, mani, gita, vcs2l, Android Repo, and west.\n- Clarify that Base di\n[…]\nns\nwhy it is not applicable.\n- [x] PR includes `Fixes #<issue>` or `Closes #<issue>` when it should\nclose the issue.\n- [x] `Demo Impact` is meaningful for `needs-demo` work, or explicitly\nsays `None.`",
          "is_bot": false,
          "headline": "Refresh Base tool boundaries for current mise bootstrap and multi-rep…",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T05:39:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c12dc8022554c9f6e027c09a20cf615d605dda90",
          "body": "## Summary\n\n- narrow the public Base position to a local operating contract for\ndeterministic readiness and handoff across independent Git repositories\n- establish the core loop: inventory, prepare, verify, trust, onboard,\nand hand off\n- classify the manifest and CLI as the enabling execution contra\n[…]\nision.\n- [x] Documentation is updated across all maintained product surfaces.\n- [x] AI context is updated in `.ai-context/`.\n- [x] PR includes `Closes #1617`.\n- [x] `Demo Impact` is explicitly `None.`",
          "is_bot": false,
          "headline": "Clarify Base readiness and handoff positioning (#1625)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T05:30:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2294376c177cf44c54ace5ae5416ed0749609617",
          "body": "## Summary\n\n- Enforce the canonical category/issue/date/slug branch shape at local\nPR creation and the GitHub remote boundary.\n- Make Base-owned repo helpers and the Skills workflow create\nissue-backed branches and verify issue categories.\n- Make the policy explicit and tool-independent across stand\n[…]\nsts passed, 1 skipped; 698 Bash tests\npassed.\n- Affected Bats suites: 161 passed.\n- Workflow tests: 21 passed.\n- Bash and Zsh syntax, warning-level ShellCheck, and git diff checks\npassed.\n\nFixes #1623",
          "is_bot": false,
          "headline": "Enforce issue-backed branch naming (#1626)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T05:14:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ba5ffdf9246e57edb91a1ff01f8d05a75ee29a1",
          "body": "## Summary\n\n- centralize Base-owned Python remote installer definitions in one\nimmutable registry\n- bring Debian-family uv and mise bootstrap paths under the documented\nallowlist and consent policy\n- add paired managed URL and SHA-256 overrides that fetch once, verify\nexact bytes, execute by argv, a\n[…]\n\n- [x] Documentation is updated when behavior or user-facing commands\nchange.\n- [x] AI context is updated in `.ai-context/`.\n- [x] PR includes `Closes #1608`.\n- [x] `Demo Impact` is explicitly `None.`",
          "is_bot": false,
          "headline": "Harden uv and mise remote installer policy (#1624)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T04:52:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c751a30fa1cd9f34de3d459a59ded76b35b08d72",
          "body": "## Summary\n\n- Add direct command-boundary coverage for GitHub Project issue field\nmutations.\n- Exercise the existing typed ProjectOperations seam with deterministic\nnetwork-free fakes.\n- Prove dry-run safety, add-before-update ordering, deterministic\nmulti-field updates, controlled lookup and mutati\n[…]\n from the issue worktree.\n- [x] Tests are independent of GitHub credentials and network access.\n- [x] AI context applicability is explained.\n- [x] PR includes Fixes #1604.\n- [x] Demo impact is stated.",
          "is_bot": false,
          "headline": "Add Project issue mutation command tests (#1622)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T04:42:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5073b783c1fe76742090e9c8b4c40c218f83451d",
          "body": "## Summary\n\n- Preserve every non-IDE BaseManifest field when applying user-local IDE\npreferences.\n- Replace brittle whole-object reconstruction with an immutable\ndataclasses.replace update.\n- Add regression coverage for parsed project.languages and a\nfuture-field preservation invariant.\n\n## Issue\n\nF\n[…]\n Regression proof and the full Python suite pass.\n- [x] Documentation changes are not required.\n- [x] AI context applicability is explained.\n- [x] PR includes Fixes #1607.\n- [x] Demo impact is stated.",
          "is_bot": false,
          "headline": "Preserve manifest fields during user config merging (#1621)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-15T04:39:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "591e34a8fed6ce9cbe27f483f852bec81153f3eb",
          "body": "Closes #1599",
          "is_bot": false,
          "headline": "Add explicit language profiles to repo init",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-14T19:54:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d09f2dc273b87587178a3a834eda09440c1a00dd",
          "body": "Fixes #1569",
          "is_bot": false,
          "headline": "Make project-local .venv the Python default",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-14T19:51:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "686d5ad62fdd412b19dbaadeeed7e80872634ba3",
          "body": "## Summary\n- move `basectl repo` GitHub-side repository settings, labels, ruleset\nhandling, repo creation, and Project metadata delegation into\n`repo_github_settings.sh`\n- keep shared path, formatting, `gh` readiness, PR, and local baseline\nprimitives in `repo.sh`\n- update the repo ownership map and\n[…]\nests/test_contract_hardening.py -q`\n- `git diff --check`\n- `env -u BASE_HOME\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1563-full ./bin/base-test`",
          "is_bot": false,
          "headline": "Extract repo GitHub settings helper (#1598)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-14T03:49:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bc9896e5f2cc3e5732f12761a68e5db509900253",
          "body": "## Summary\n- move Nix/devenv compatibility report implementation into\n`base_devenv.report`\n- keep `base_setup.devenv_report` as a compatibility facade for\nhistorical imports\n- update setup engine imports, ownership docs, and facade/package tests\n\nRefs #1576\n\n## Validation\n- `/Users/rameshhp/.base.d/\n[…]\nst_compatibility_facades.py`\n- `git diff --check`\n- `env -u BASE_HOME\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1576-devenv-full ./bin/base-test`",
          "is_bot": false,
          "headline": "Extract devenv report package (#1597)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-14T02:10:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21ead9e8265008dcd5f4e03578674f02fbebbdc4",
          "body": "## Summary\n- Move Dev Containers export ownership from base_setup into a focused\nbase_devcontainer package.\n- Keep base_setup.devcontainer_export as an explicit compatibility\nfacade for historical imports.\n- Update base_setup command dispatch to use the focused package\ndirectly.\n- Add package-bounda\n[…]\nt_compatibility_facades.py\n- git diff --check\n- env -u BASE_HOME\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1576-devcontainer-full ./bin/base-test",
          "is_bot": false,
          "headline": "Extract devcontainer export package (#1596)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-14T01:40:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "803a947472775b2a357f61f3f47099c697e2c133",
          "body": "## Summary\n- Update the setup-common ownership map after the #1591 implementation\nslices.\n- Clarify that Python owns structured diagnostics JSON schema\nconstruction and shell keeps routing, fallback, and human text\nrendering.\n- Refresh the docs guard test to assert the implemented close-out\nwording.\n\nRefs #1591\n\n## Validation\n- /Users/rameshhp/.base.d/base/.venv/bin/python -m pytest\ntests/test_setup_common_ownership_docs.py -q\n- git diff --check",
          "is_bot": false,
          "headline": "Document Python diagnostics JSON ownership (#1595)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-13T06:02:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "342b53ed15be02d2f18780a5a68130e163ffb465",
          "body": "## Summary\n- Move check and doctor JSON item assembly from shell argument tuples to\nPython diagnostics.\n- Have shell write its existing raw check-result records and pass them\nto Python with result-file arguments.\n- Preserve existing embedded project/profile payloads, JSON escaping,\nstatus aggregatio\n[…]\nmon_ownership_docs.py\n- git diff --check\n- env -u BASE_HOME\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1591-check-record-json-full\n./bin/base-test",
          "is_bot": false,
          "headline": "Move check JSON assembly to result records (#1594)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-13T05:57:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd0c4929c73ba051e52725a8a52574cb0f5a3073",
          "body": "## Summary\n\n- move Base check finding metadata and display names into the Python\ndiagnostics renderer\n- add an internal base-check-metadata diagnostics command for shell\nconsumers\n- update doctor text rendering to consume Python metadata in one batch\nwhile retaining a shell fallback for pre-runtime \n[…]\nbcommands/doctor.sh\n- git diff --check\n- env -u BASE_HOME\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1591-diagnostic-metadata-full\n./bin/base-test",
          "is_bot": false,
          "headline": "Move Base check metadata into diagnostics renderer (#1593)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-13T05:39:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "24f098428622ce4fea772a6d82ec55ad3cd04e34",
          "body": "## Summary\n\n- documents the #1570 close-out decision that setup_common decomposition\nis driven by cohesive functional ownership, not line count\n- records that notification extraction is intentionally deferred until\nnotification policy becomes a real cross-platform domain\n- tracks Python-owned check/\n[…]\ndiff --check\n- env BASE_CACHE_DIR=/private/tmp/base-1591-readiness\n/Users/rameshhp/work/base/bin/basectl gh issue readiness 1591 --repo\nbasefoundry/base --project-owner basefoundry --project-number 10",
          "is_bot": false,
          "headline": "Document setup_common close-out decisions (#1592)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-12T22:06:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d166fca75f169b68dfe664d6c5cf87387948b7c4",
          "body": "## Summary\n- add `setup_profiles.sh` for setup/check profile parsing and dispatch\nhelpers\n- keep existing public `setup_*` names while `setup_common.sh` sources\nthe profile helper and keeps shared orchestration\n- update setup-common ownership docs and source-guard coverage for the\nnew helper\n\nRefs #\n[…]\n-profiles-helper bin/basectl check\n--ci`\n- `env -u BASE_HOME\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1570-profiles-helper-full\n./bin/base-test`",
          "is_bot": false,
          "headline": "Extract setup profiles helper (#1590)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-12T18:22:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "40b2df7ae20618f72deb148766ba965eff4a0998",
          "body": "## Summary\n- add `setup_venv.sh` for Base runtime virtualenv and Python bootstrap\nhelpers\n- keep existing public `setup_*` names while `setup_common.sh` retains\nshared setup/check dispatch\n- move CI-runtime setup/check bodies and venv/package probe writers into\nthe runtime helper\n- refresh setup-com\n[…]\nase-1570-venv-helper bin/basectl check\n--ci`\n- `env -u BASE_HOME\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1570-venv-helper-full ./bin/base-test`",
          "is_bot": false,
          "headline": "Extract Base runtime venv setup helper (#1589)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-12T01:26:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d5045f4296914736cbb9c448606a945d268e8b9",
          "body": "## Summary\n- add `setup_macos_homebrew.sh` for macOS/Homebrew-specific setup and\ncheck helpers\n- keep existing public `setup_*` function names while `setup_common.sh`\nsources the helper and retains shared dispatch\n- update setup-common ownership docs and source-guard coverage for the\nsecond platform\n[…]\nt_setup_common_ownership_docs.py`\n- `git diff --check`\n- `env BASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1570-macos-helper bin/basectl check\n--ci`",
          "is_bot": false,
          "headline": "Extract macOS/Homebrew setup helper (#1588)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T23:32:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "17bf2980d28868b0cc5f7a0ff02fc768f0a72267",
          "body": "## Summary\n\n- extract the Ubuntu/Debian setup/check surface from `setup_common.sh`\ninto `setup_linux_debian.sh`\n- preserve existing `setup_*` function names, platform dispatch, output\ntext, dry-run behavior, and `--yes` consent behavior\n- refresh `docs/setup-common-ownership.md` so the current owner\n[…]\nt_setup_common_ownership_docs.py`\n- `git diff --check`\n- `env BASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1570-linux-helper bin/basectl check\n--ci`",
          "is_bot": false,
          "headline": "Extract Linux/Debian setup helper (#1587)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T19:56:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b28051c37eab3ffd3ac667728f6e1575e2874827",
          "body": "## Summary\n\n- refresh `docs/setup-common-ownership.md` against the current\n2,906-line `setup_common.sh`\n- replace the stale #1009-oriented note with a staged #1570\ndecomposition strategy\n- add a pytest guard that keeps the ownership doc linked and verifies\ndocumented `setup_*` anchors exist in the s\n[…]\nmon_ownership_docs.py\ntests/test_contract_hardening.py -q`\n- `/Users/rameshhp/.base.d/base/.venv/bin/python -m pylint\n--rcfile=.pylintrc tests/test_setup_common_ownership_docs.py`\n- `git diff --check`",
          "is_bot": false,
          "headline": "Document setup_common decomposition strategy (#1586)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T19:17:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1385549353d9d0f8ed23cbadb29bd8afd59d9219",
          "body": "## Summary\n- add `.github/workflows/base-check.yml` as a reusable `workflow_call`\nwrapper for `basectl check --ci`\n- support source-checkout and preinstalled setup modes with minimal\npermissions and pinned actions\n- document caller usage, supported inputs, and when to keep a repo-local\nworkflow\n\nClo\n[…]\nb_workflows.py -q`\n- `python -m pylint --rcfile=.pylintrc tests/test_github_workflows.py`\n- `python -m pytest tests/test_contract_hardening.py\ntests/test_linux_support_docs.py -q`\n- `git diff --check`",
          "is_bot": false,
          "headline": "Add reusable Base check workflow (#1585)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T17:10:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "464f1eba97ca1fe910e047f28132f6d1198b535b",
          "body": "## Summary\n- add a schema-versioned local explanation catalog for selected\nhigh-frequency doctor/check finding IDs\n- expose `basectl doctor explain <finding-id>` with text and JSON output\n- document the provider-neutral boundary and update shell\ncompletions/tests\n\nCloses #1577\n\n## Tests\n- `python -m\n[…]\n/work/base-bash-libs/lib/bash\nbin/basectl doctor explain BASE-D001 --format json`\n- `BASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nbin/basectl doctor explain BASE-X999 --format json`",
          "is_bot": false,
          "headline": "Add local finding explanations (#1584)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T17:00:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2ec2e2fed1502a4b6e099961950d8b9594b3146a",
          "body": "## Summary\n- add `basectl logs last` for latest failed command metadata and bounded\nredacted log tails\n- support `--format json`, command filtering, missing-log handling, and\ncompletions\n- document the new observability surface and command reference entry\n\nCloses #1571\n\n## Tests\n- `python -m pytest \n[…]\ns/basectl_completion.zsh`\n- `git diff --check`\n- `BASE_CACHE_DIR=/private/tmp/base-1571-smoke bin/basectl logs last`\n- `BASE_CACHE_DIR=/private/tmp/base-1571-smoke bin/basectl logs last\n--format json`",
          "is_bot": false,
          "headline": "Add logs last failure tail (#1583)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T16:51:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13019d126e27b47c46752edff268388f2f4ddacf",
          "body": "## Summary\n- add `BASE_HOST_ENV` as readonly runtime metadata with `native` and\n`wsl2` values\n- detect WSL2 from Linux kernel metadata while preserving\n`BASE_PLATFORM=linux-debian` for Ubuntu/Debian\n- surface host environment context in setup/check/doctor runtime and\nunsupported-platform messaging\n-\n[…]\n -q`\n- `bash -n base_init.sh\ncli/bash/commands/basectl/subcommands/setup_common.sh bin/base-test\nlib/shell/baserc_guard.sh`\n- `zsh -n lib/shell/zsh_baserc_guard.zsh`\n- `git diff --check`\n\nCloses #1573",
          "is_bot": false,
          "headline": "Detect WSL2 host environment (#1582)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T16:37:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e950b65fa6eb2d06407b43effccac8e04dfc55f",
          "body": "## Summary\n- add `docs/stability-tiers.md` for stable, experimental, and internal\nBase surfaces\n- link stability tiers from the command reference and docs map\n- register the stability-tier contract with focused docs tests\n\n## Validation\n- `/Users/rameshhp/.base.d/base/.venv/bin/python -m pytest\ntest\n[…]\n.py -q`\n- `/Users/rameshhp/.base.d/base/.venv/bin/python -m pytest\ntests/test_stability_tiers_docs.py tests/test_contract_hardening.py\ntests/test_base_cli_docs.py -q`\n- `git diff --check`\n\nFixes #1579",
          "is_bot": false,
          "headline": "Define Base stability tiers (#1581)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T14:40:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c27628843eca740cfa348d0afd27d0fd6770138f",
          "body": "## Summary\n- add a focused docs-version test for guarded current-release references\n- refresh `docs/technical-overview.md` from stale 1.3.0 status to 1.6.1\n- update the platform status text to match current macOS and\nUbuntu/Debian support\n\n## Validation\n- `/Users/rameshhp/.base.d/base/.venv/bin/pyth\n[…]\n_version.py -q`\n- `/Users/rameshhp/.base.d/base/.venv/bin/python -m pytest\ntests/test_docs_version.py tests/test_base_cli_docs.py\ntests/test_contract_hardening.py -q`\n- `git diff --check`\n\nFixes #1572",
          "is_bot": false,
          "headline": "Guard docs current-version references (#1580)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-11T14:13:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ae1538207a839fa7da82b548303b5a0485987c0",
          "body": "…#1556)\n\n## Summary\n\n- Print a compact runtime chain summary at the start of text-mode\n`basectl setup`, `basectl check`, and `basectl doctor` output.\n- Treat stale x86_64 Base virtualenvs under Apple Silicon Homebrew\n(`/opt/homebrew`) as unhealthy before profile setup reaches later `brew\ninstall` ca\n[…]\n\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1555-full-rebased ./bin/base-test`\n  - Python: 839 passed, 1 skipped\n  - BATS: 662 passed\n\nFixes #1555",
          "is_bot": false,
          "headline": "Detect mixed-architecture Base runtime chains before Homebrew setup (…",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-10T22:19:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e4c18c2f95b36d8aa22b2216a169642d0aa31732",
          "body": "## Summary\n- add `basectl gh issue readiness <number>` for read-only implementation\nissue readiness checks\n- validate required issue body sections and optional Base Project fields\nvia explicit Project owner/number flags\n- update Bash/Zsh completions and GitHub workflow docs for the\nagent-assignment \n[…]\n`zsh -n lib/shell/completions/basectl_completion.zsh`\n- `git diff --check`\n- live smoke: `./bin/basectl gh issue readiness 1560 --repo\nbasefoundry/base --project-owner basefoundry --project-number 10`",
          "is_bot": false,
          "headline": "Add GitHub issue readiness check (#1568)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-09T19:22:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "31ebdbec7c80afce6d9592cd87b5c2ee8ce1650a",
          "body": "## Summary\n\n- Add `basectl repo check --agent-ready` to verify the\nbaseline-integrated agent guidance contract.\n- Keep `repo check --agent-guidance` backward compatible while giving\n`--agent-ready` a `repo init ... --agent-ready` repair hint.\n- Update help, completions, docs, changelog, and AI comma\n[…]\n/base-agent-ready-check-smoke-home\n/Users/rameshhp/work/base-worktrees/1559-add-agent-ready-repo-check/bin/basectl\nrepo check /private/tmp/base-agent-ready-check-smoke/repo --agent-ready`\n\nFixes #1559",
          "is_bot": false,
          "headline": "Add agent-ready repo check (#1567)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-09T17:40:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "38974b640546f1bd300ef2eee4f24f3d79b03a21",
          "body": "## Summary\n\n- Add `basectl repo init --agent-ready` to seed `AGENTS.md` and\n`skills.md` alongside the standard baseline.\n- Include agent-ready files in `repo init --pr` staging and in the\ngenerated rerun command/PR body.\n- Update completions, docs, changelog, and fix singular grammar in the\nshared a\n[…]\n/1558-add-agent-ready-mode-to-basectl-repo-ini/bin/basectl\nrepo init smoke-agent-ready --path\n/private/tmp/base-agent-ready-smoke/smoke-agent-ready --agent-ready\n--no-configure --dry-run`\n\nFixes #1558",
          "is_bot": false,
          "headline": "Add agent-ready repo init mode (#1566)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-09T17:30:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8a83d9b3f5f769250e4ba2d6b34308d6f5b315e8",
          "body": "## Summary\n- Add `Agentic Coding Platform` to Base Project config and the\nimplementation issue template.\n- Document when agentic-platform issues should use that Initiative.\n- Update AI workflow context and repo-baseline Project metadata docs.\n\n## Issue\nFixes #1557\n\n## Validation\n- `PYTHONPATH=lib/py\n[…]\nive Project metadata was configured with `basectl gh project configure\n--initiative-option \"Agentic Coding Platform\"`. Open agentic-platform\nissues #1558-#1562 were also moved onto the new Initiative.",
          "is_bot": false,
          "headline": "Add Agentic Coding Platform initiative (#1565)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-09T17:10:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea7c63d58ba17c2d085b79322907aee26874c20d",
          "body": "## Summary\n\n- Add `--ci` mode to `basectl setup`, `basectl check`, and `basectl\ndoctor` using a shared CI-safe environment helper.\n- Keep `basectl ci setup|check|doctor` as a compatibility alias that\ndelegates to the corresponding `--ci` command path.\n- Update docs, GitHub workflow examples, complet\n[…]\nterface.\n\nFixes #1553\n\n## Testing\n\n- `env -u BASE_HOME\nBASE_BASH_LIBS_DIR=/Users/rameshhp/work/base-bash-libs/lib/bash\nBASE_CACHE_DIR=/private/tmp/base-1553-cache ./bin/base-test`\n- `git diff --check`",
          "is_bot": false,
          "headline": "Add CI mode flag to lifecycle commands (#1554)",
          "author_name": "Ramesh Padmanabhaiah",
          "author_login": "codeforester",
          "committed_at": "2026-07-08T23:24:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 23,
      "commits_last_year": 1024,
      "latest_release_at": "2026-07-17T06:48:23Z",
      "latest_release_tag": "v1.7.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 13,
      "days_since_latest_release": 10,
      "mean_days_between_releases": 3.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 14,
      "stars": 118,
      "watchers": 6,
      "fork_history": {
        "days": [
          {
            "date": "2019-03-27",
            "count": 1
          },
          {
            "date": "2020-02-19",
            "count": 1
          },
          {
            "date": "2020-09-11",
            "count": 1
          },
          {
            "date": "2020-11-06",
            "count": 1
          },
          {
            "date": "2020-11-07",
            "count": 1
          },
          {
            "date": "2021-01-15",
            "count": 1
          },
          {
            "date": "2022-08-08",
            "count": 1
          },
          {
            "date": "2022-10-27",
            "count": 1
          },
          {
            "date": "2023-04-26",
            "count": 1
          },
          {
            "date": "2023-06-02",
            "count": 1
          },
          {
            "date": "2024-02-05",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-07-26",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 14,
        "total_forks": 14
      },
      "star_history": null,
      "open_issues_and_prs": 23
    },
    "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": 76773,
      "source_files_sampled": 261,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        ".github/copilot-instructions.md",
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 8831
    },
    "dependencies": {
      "manifests": [
        "requirements-dev.txt"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 7,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "bandit",
            "direct": false,
            "version": "1.9.4",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pip-audit",
            "direct": false,
            "version": "2.10.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "tomli",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 7,
        "direct_count": 0,
        "indirect_count": 7
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 876,
        "open_issues": 23,
        "closed_ratio": 0.974,
        "closed_issues": 852,
        "closed_unmerged_prs": 10
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "codeforester",
          "commits": 1153,
          "avatar_url": "https://avatars.githubusercontent.com/u/22363102?v=4"
        },
        {
          "type": "User",
          "login": "tiamilani",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/22966293?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.999
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "base-check.yml",
        "copilot-setup-steps.yml",
        "issue-branch-policy.yml",
        "project-intake.yml",
        "pylint.yml",
        "skills.yml",
        "tests.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".pylintrc"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 7,
            "reason": "dependency not pinned by hash detected -- score normalized to 7",
            "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": "061828e87c2b58234ee22a061de6d2ec24afa1db",
        "ran_at": "2026-07-27T21:51:57Z",
        "aggregate_score": 4.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T00:49:19Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-27T00:42:04Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 124,
          "created_at": "2026-05-28T18:39:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 570,
          "created_at": "2026-06-10T22:53:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 747,
          "created_at": "2026-06-15T21:48:23Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 875,
          "created_at": "2026-06-19T05:35:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 947,
          "created_at": "2026-06-22T05:27:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1562,
          "created_at": "2026-07-09T01:30:44Z",
          "last_comment_at": "2026-07-22T18:36:00Z",
          "last_comment_author": "ofekron"
        },
        {
          "number": 1574,
          "created_at": "2026-07-10T23:46:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1578,
          "created_at": "2026-07-10T23:48:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1603,
          "created_at": "2026-07-15T03:01:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1606,
          "created_at": "2026-07-15T03:01:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1610,
          "created_at": "2026-07-15T03:03:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1612,
          "created_at": "2026-07-15T03:03:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1613,
          "created_at": "2026-07-15T03:03:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1611,
          "created_at": "2026-07-15T03:03:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1616,
          "created_at": "2026-07-15T03:06:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1619,
          "created_at": "2026-07-15T03:06:07Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1620,
          "created_at": "2026-07-15T03:06:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1741,
          "created_at": "2026-07-23T22:36:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1742,
          "created_at": "2026-07-23T22:36:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1744,
          "created_at": "2026-07-23T22:36:51Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/basefoundry/base",
    "host": "github.com",
    "name": "base",
    "owner": "basefoundry"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 66,
      "inputs": {
        "security": 58,
        "vitality": 84,
        "community": 58,
        "governance": 44,
        "engineering": 84
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "commits_last_year": 1024,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 13
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "13/52 weeks with commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 13
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1024 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1024
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 23,
              "latest_release_tag": "v1.7.0",
              "releases_from_tags": false,
              "days_since_latest_release": 10,
              "mean_days_between_releases": 3.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "23 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 23
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 10 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 10
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 58,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 47,
            "inputs": {
              "forks": 14,
              "stars": 118,
              "watchers": 6,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "118 stars",
                "points": 33.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 118
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "14 forks",
                "points": 9.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "6 watchers",
                "points": 3.9,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "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": 18,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 44,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.999
            },
            "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": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "merged_prs": 876,
              "open_issues": 23,
              "closed_issues": 852,
              "issue_closed_ratio": 0.974,
              "closed_unmerged_prs": 10
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "97% of issues closed",
                "points": 45.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "876/886 decided PRs merged",
                "points": 37.8,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 876,
                      "decided": 886
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "followers": 2,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "basefoundry",
              "public_repos": 7,
              "account_age_days": 38
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2 followers of basefoundry",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2,
                      "login": "basefoundry"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "7 public repos, account ~0 yr old",
                "points": 6.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 7
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 84,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".pylintrc",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".pylintrc"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "automation",
                "bash-scripts",
                "bootstrap",
                "cli",
                "dev-environment",
                "developer-tools",
                "dotfiles-macos",
                "homebrew",
                "macos",
                "multi-repo",
                "project-orchestration",
                "shell",
                "workspace",
                "workspace-management",
                "zsh",
                "bash",
                "dotfiles"
              ],
              "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": "17 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "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": "moderate",
        "name": "Security",
        "value": 58,
        "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": 47,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.7
            },
            "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 is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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 7",
                "points": 3.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 7 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 7
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 7,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 7,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 59,
        "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.89,
              "agent_instruction_files": [
                ".github/copilot-instructions.md",
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 8831
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".github/copilot-instructions.md, AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".github/copilot-instructions.md, AGENTS.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": "89 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 89,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".pylintrc",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".pylintrc"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 7",
                "points": 7,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 76773,
              "source_files_sampled": 261,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/261 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 261,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T21:52:14.028398Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/basefoundry/base.svg",
  "full_name": "basefoundry/base",
  "license_state": "custom",
  "license_spdx": null
}

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

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

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