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

arpitarya / fux

Fux records why your code is the way it is — and checks it's still true.

PythonMIT★ 0 estrellas⑂ 0 forksdesde jun 2026Ver en GitHub ↗

arpitarya/fux tiene un índice de salud de 56 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (86/100) y la más baja, Community & Adoption (24/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

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

56
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

arpit aryaCuenta personal
7 seguidores19 repositorios públicosdesde ago 2012

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
PyPIfux-engine0.24.0-31hace 0 díasadragentclaudecodebasefrontmattergraphknowledgellmrules

Métricas por categoría

Vitalidad

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

75Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
4.8/36Cadencia de commits — 7/52 semanas con commits
18/18Volumen de commits — 119 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year119
human_commit_share1
days_since_last_push0
active_weeks_last_year7
Cómo se puntúa
27/27Publica versiones — 30 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~2,4 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count30
latest_release_tagv0.24.0
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases2,4
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?

24Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

51Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
34.6/38.3Aceptación de PR — 38/42 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/10 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs38
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs4
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
6.5/25Alcance del propietario — 7 seguidores de arpitarya
21.5/25Trayectoria — 19 repos públicos, cuenta de ~13 años
Datos de entrada utilizados
followers7
owner_typeUser
is_verified
owner_loginarpitarya
public_repos19
account_age_days5096
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en pypi
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 31 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesfux-engine
ecosystemspypi
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

86Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter
9.6/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 10 out of 10 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_config
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

35En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — sin datos
2.5/2.5CI-Tests — 10 out of 10 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/10 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
3.8/7.5Vulnerabilities — 5 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,5
Excluidos de la puntuación (sin datos o no aplicable): branch_protection, signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

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

68Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md, archive/CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 97 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,97
agent_instruction_filesCLAUDE.md, archive/CLAUDE.md
agent_instruction_max_bytes23.674
Cómo se puntúa
18/18Arranque con un solo comando — archive/justfile
22/22Pruebas automatizadas
11/11Configuración de lint / formato
0/11Verificación estática de tipos
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 81 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesuv.lock
has_dockerfileno
typed_languageno
bootstrap_filesarchive/justfile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,81
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
55/55Tamaños de archivo manejables — 0/255 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes55.826
source_files_sampled255
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — example
Datos de entrada utilizados
example_dirsexample
has_mcp_signalno
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index pypi:fux-engine@0.24.0; advisories assessed against the repository dependency graph instead

Más detalle

OpenSSF Scorecard 3.5 / 10
3.5agregado

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

10Binary-Artifactsno binaries found in the repo
n/dBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests10 out of 10 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/10 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
5Vulnerabilities5 existing vulnerabilities detected
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 8725,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "HTML": 24274,
        "Just": 1232,
        "Shell": 21642,
        "Python": 1143423,
        "JavaScript": 55826
      },
      "pushed_at": "2026-07-22T18:48:40Z",
      "created_at": "2026-06-01T17:53:43Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T18:47:00Z",
      "description": "Fux records why your code is the way it is — and checks it's still true.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "https://www.linkedin.com/in/arpit-arya-4b5b8562/",
      "name": "arpit arya",
      "type": "User",
      "login": "arpitarya",
      "company": null,
      "location": "India",
      "followers": 7,
      "avatar_url": "https://avatars.githubusercontent.com/u/2118113?v=4",
      "created_at": "2012-08-08T17:06:57Z",
      "is_verified": null,
      "public_repos": 19,
      "account_age_days": 5096
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.24.0",
          "kind": "minor",
          "published_at": "2026-07-22T18:48:41Z"
        },
        {
          "tag": "v0.23.1",
          "kind": "patch",
          "published_at": "2026-07-22T05:24:54Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2026-07-21T19:36:29Z"
        },
        {
          "tag": "v0.22.1",
          "kind": "patch",
          "published_at": "2026-07-21T08:15:23Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2026-07-21T08:07:57Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-07-01T06:30:27Z"
        },
        {
          "tag": "v0.17.4",
          "kind": "patch",
          "published_at": "2026-07-01T04:45:54Z"
        },
        {
          "tag": "v0.17.3",
          "kind": "patch",
          "published_at": "2026-07-01T04:28:30Z"
        },
        {
          "tag": "v0.17.2",
          "kind": "patch",
          "published_at": "2026-07-01T04:18:08Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2026-07-01T04:02:34Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2026-06-30T04:54:01Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-06-29T05:39:59Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2026-06-29T04:56:54Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-06-24T07:12:01Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-06-23T20:04:32Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-06-21T17:34:07Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-06-19T07:25:33Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-06-18T20:29:27Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-06-18T19:54:13Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-06-18T19:04:30Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-06-18T03:13:15Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-06-18T02:04:01Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-06-16T21:10:08Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-06-14T11:50:40Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-06-09T16:59:40Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-06-09T15:42:49Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-06-09T15:26:05Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-06-09T12:28:00Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-06-07T09:22:33Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-06-05T19:00:11Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "cd9550687a15ffa157515882d3f188f31a7049cb",
          "body": "feat: phase 5 — debug & observability (v0.24.0)",
          "is_bot": false,
          "headline": "Merge pull request #42 from arpitarya/feat/phase5-debug-observability",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-22T18:46:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95304e00dd125702624f0f403998aa38feb56cb6",
          "body": "Every Fux stage is now inspectable without a debugger:\n\n- [debug] in fux.toml + src/fux/debug.py: a hand-rolled, stdout-safe emitter\n  (dbg()/timer()/is_enabled()), precedence --debug[=LEVEL] > FUX_DEBUG >\n  toml level > off. Redacts document content by default; no wall-clock\n  unless timing=true; o\n[…]\n's new\nmirrored; handoff+prompt archived as docs/archive/v0.24.0-debug-observability-*.\n\nSuites: 417 unit + 100 e2e (+1 gated skip), all green.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: phase 5 — debug & observability (v0.24.0)",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-22T18:43:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3d4a6ac22c57ea3a3ee973316f72d6285f1dc480",
          "body": "release: v0.23.1 — docs reorganization + example bundle",
          "is_bot": false,
          "headline": "Merge pull request #41 from arpitarya/release/v0.23.1-docs-examples",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-22T05:24:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17d4055951a5a53dbc8298b3d9efd37e92aac2ae",
          "body": "Documentation-only patch; the wheel is functionally identical to 0.23.0 (only\ndocstring/comment pointers and one test path changed).\n\nDocs:\n- Promote core nav docs to ALL-CAPS entry-point files (PLAN, INTERVIEW,\n  WORKLOG, IMPLEMENTATION), shedding frontmatter per the repo convention.\n- New docs/exa\n[…]\nsion__ 0.23.0 → 0.23.1; CHANGELOG entry mirrored into README.\n- 365 unit tests green; build + twine check --strict pass as 0.23.1.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v0.23.1 — docs reorganization + example bundle",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-22T05:21:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "53ba976b604fe8bca033580ab7dcf1ac5e94e440",
          "body": "chore: drop `fux gate` and `ai-review` as required status checks",
          "is_bot": false,
          "headline": "Merge pull request #40 from arpitarya/chore/drop-required-checks",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T19:49:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09fcdc4ee9ce1ea544f292eaab001f6d5252e323",
          "body": "At Arpit's instruction. Both jobs still run on every PR and their results stay\nvisible — they simply no longer block a merge.\n\nRecorded honestly rather than quietly, because this weakens the merge wall:\nwith no required checks and required_pull_request_reviews:null, nothing prevents\nmerging a red PR\n[…]\n\nrow, and a new CLAUDE.md section telling future agents that CI green is now\nsomething they must verify themselves before merging.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: drop `fux gate` and `ai-review` as required status checks",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T19:46:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bbda2bb1500e58095a6aab5dc6ce80b1a41ceece",
          "body": "docs: worklog — v0.23.0 merged and published",
          "is_bot": false,
          "headline": "Merge pull request #39 from arpitarya/docs/v0230-release-record",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T19:45:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34b342d95e7ed1b13b5bbce8797fef3d879ad4f1",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: worklog — v0.23.0 merged and published",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T19:39:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "471fcfe3552ecd21b7d347ccd5706f529e8ab7fc",
          "body": "Phase 4 — knowledge substrate v3 (v0.23.0)",
          "is_bot": false,
          "headline": "Merge pull request #38 from arpitarya/feat/phase4-knowledge-substrate",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T19:35:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4155798750334278a034f0d79cb341b852e07106",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: worklog — phase 4 completion report (v0.23.0)",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T19:27:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "da8d0131fe19aaa19778b63629402145dce41f06",
          "body": "M8 — synthetic 100k benchmark, generator and harness committed so the numbers\nare re-measurable rather than anecdotal.\n\n  Sizes, measured @100k (100 000 docs · 145.7 MB source · 116 756 chunks):\n    .fux/state/  22.96 MB (230 B/doc)  vs ≤30 MB budget   ✅\n    └ state/df/   0.92 MB   (9 B/doc)  vs ≤5 \n[…]\n.\n  - Version 0.23.0.\n\nSuites: 365 unit + 71 e2e (+1 gated skip); eval hit@5 1.000, --lexical-only\nunchanged at 0.762/0.952/0.833.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: M8 scale benchmark + phase 4 close-out — v0.23.0",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T19:27:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "55b2538253c3145c1d0bd825c7872d97b492f591",
          "body": "… pull\n\nLean is implemented as a Searcher built over re-derived candidates with the\ncommitted df sidecar injected, so the kernel above never learns which profile\nit is on. tf is exact (deterministic re-derivation, verified by fux.lock),\ndf/n/avg_wlen are exact (stored), and vectors are re-embedded r\n[…]\nest lives in the runtime plane; corpus size now comes from the sidecar.\n\nSuites: 363 unit + 62 e2e; eval unchanged at hit@5 1.000.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(profiles): M7 — full/lean/auto with provable parity, LRU, and db…",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T19:07:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "164ff356fb330c24106cb4fad57f2b5ba7319b62",
          "body": "… list in RRF\n\nPersonalized PageRank restricted to the seed neighbourhood (HippoRAG/LightRAG's\noperator without the machinery), with every constant from handoff §E: damping\n0.85, exactly 3 iterations, top 10 expanded above 0.01, EXTRACTED 1.0 /\nINFERRED 0.6, 0.8 decay per hop — all under [engine.gra\n[…]\ncture for that question to be\ndecided by measurement rather than taste.\n\nSuites: 344 unit + 61 e2e; eval unchanged at hit@5 1.000.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(graph): M6 — PPR-lite expansion, reliability-scored paths, graph…",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T18:59:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f2075e141f7351a52718fb93496585401fa518a3",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: worklog — Arpit's M4/M5 rulings (Cowork entry)",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T18:53:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "20a0bf3dbc0ea359ebc42dee4a55804c00f8c506",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: worklog — phase 4 M3a-M5 session record",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T18:47:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f092223ac42f5e19f85183da698d3d98eddb03d9",
          "body": "…l into RRF\n\nThe dense pass in v0.22 only re-scored BM25F's candidates, so a document with\nno lexical overlap was unreachable however close it was semantically — the miss\nclass ADR 0006 recorded and could not fix by design. Scanning every document's\n32-byte code removes that ceiling for the price of\n[…]\ntes\" means the correct *document* had no overlap,\nnot the query — and that case always has candidates.\n\nSuites: 324 unit + 61 e2e.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(fuxvec): M5 — full-corpus binary scan, exact rerank, dense_globa…",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T18:47:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a933e72cf0da32182d1298b5eeb6e478b9445c30",
          "body": "retrieve(config, seed, ...) -> ResultGraph is now the only retrieval path.\nask/find/answer are projections of it rather than their own pipelines, and\nexplain/graph/path join them as new projections of the same call.\n\n  - fux/kernel.py: ResultGraph (seeds, nodes, edges, paths, passages) with the\n    \n[…]\ne title).\n\nv0.22 golden byte-parity holds through the re-plumb: all six goldens pass on\nboth backends.\n\nSuites: 308 unit + 61 e2e.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(kernel): M4 — one retrieval kernel, six verb projections",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T18:38:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9eb3877a315e48ccca7b145f14587f3e6bbd2499",
          "body": "Arpit's call on the M3 escalation: DoD 7 promised rankings identical across\nprofiles, but lean could only recover exact tf (by re-deriving text). df, n and\navg_wlen are corpus-level, so Bloom-derived df would have quietly turned\n\"identical\" into \"approximately identical\". The guarantee does not soft\n[…]\nect the state envelope to ~35 MB against\na 30 MB budget. M8 measures properly on the synthetic corpus.\n\nSuites: 285 unit + 55 e2e.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(state): exact df sidecar — lean BM25F provably identical to full",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T18:30:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "74f229f454d8a62d37e94aad5109286a7e58cc44",
          "body": "…ate plane, document graph\n\nM1 — SQLite substrate + fux.lock\n  - index/sqlstore.py: schema A (format_version 2), WAL, single-writer\n    .fux/index/.lock, primary-key-sorted writes for a reproducible file.\n  - [index] format = json|sqlite|auto dispatch; both backends persist the same\n    dict shape, \n[…]\nfux answer` has\nno state-only mode, because citations need line-anchored passages.\n\nSuites: 172+29 → 262 unit + 55 e2e, all green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(substrate): phase 4 M1–M3 — sqlite store, fux.lock, committed st…",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T18:23:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c360ffc3db4bfa31f5c5df3adb6e7451c297b0d4",
          "body": "The accepted design of record for the substrate phase, plus the build\ncontract that executes it, and the surrounding doc updates (plan, registry,\nglossary pointers, interview, fux-toml).\n\nIncludes Arpit's 2026-07-21 amendment to handoff §C and DoD 7: the committed\nlean plane gains an exact df sideca\n[…]\ntely so.\n\nAuthored by Arpit across the design sessions; committed here so the\nimplementation that follows has its spec in history.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: phase 4 spec — knowledge substrate v3 (handoff 0004 + proposal)",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T18:22:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "545a5973bf312187c21fe71f86b5edf1594cba39",
          "body": "docs: record PR #36 outcome + README bookkeeping note",
          "is_bot": false,
          "headline": "Merge pull request #37 from arpitarya/docs/worklog-p36-outcome",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T12:07:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "426739b2752406da0c9a18d3bfdc659b03bab5aa",
          "body": "All 11 checks (incl. first Windows/macOS suite runs) passed on the first try.\nAlso records honestly that the Cowork README rewrite was swept into #36's\ncommit by a renormalize-staging slip — content correct on main, message wrong,\nhistory left intact since main is protected.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: record PR #36 outcome + the README bookkeeping slip",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T12:04:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4ab6694e3622f447cc788f1a57f52a4b226d0a7a",
          "body": "ci: full platform matrix (linux/macos/windows 3.11–3.14), strict gate, lean ai-review",
          "is_bot": false,
          "headline": "Merge pull request #36 from arpitarya/ci/full-platform-matrix",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T12:03:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60e371c1a110790cc2a0b77d6a60cc64941a347d",
          "body": "…r, lean ai-review\n\nPipeline stage review outcomes:\n- test matrix: linux 3.11-3.14 + macos/windows at the 3.11/3.14 boundaries —\n  the support target is Python >= 3.11 on all three platforms; the pure-py\n  wheel means one build covers them, these runners prove it\n- 'fux gate' is now a strict aggrega\n[…]\nde output); .gitattributes forces LF\n  with explicit binary guards (CRLF checkout would break fixture shas/goldens)\n- pyproject: 3.14 classifier\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: full platform matrix (linux/macos/windows), strict gate aggregato…",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T08:31:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bdb21cf5db6654af7fbba028691afb2cf3330080",
          "body": "chore: agent commits attributed + Verified (committer email = signing-key UID)",
          "is_bot": false,
          "headline": "Merge pull request #35 from arpitarya/chore/verified-agent-identity",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T08:27:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "858b6c09533a01677cab85c8f27b575fdabd6b7c",
          "body": "Committer email switches from claude-code@fux.local (no GitHub account →\n'Unverified' badge, reason no_user) to the account's noreply address. The\ncommit name stays 'Claude (agent)' and the Co-Authored-By trailer keeps the\nagent trail; GitHub now attributes + verifies against the existing GPG key.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: attribute agent commits to the account (noreply email, signed)",
          "author_name": "Claude (agent)",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T08:26:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c53b9a299dad51e826a3819fc8c006034c9ea511",
          "body": "ci: remove the scheduled branch-protection audit",
          "is_bot": false,
          "headline": "Merge pull request #34 from arpitarya/ci/remove-protection-audit",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T08:19:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31800cd5aadc91fa8dc503192560c084bc05cb12",
          "body": "Arpit's call — the weekly audit-protection.yml (drift alarm comparing live\nprotection vs .github/branch-protection.json) is removed; it also required a\nBRANCH_PROTECTION_TOKEN admin PAT that was never configured, so it could only\nfail loudly. The wall itself is unchanged (required checks + enforce_a\n[…]\nlive today). The JSON source of truth and the audit/apply scripts\nremain for manual use: ./scripts/audit-branch-protection.sh arpitarya fux main\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: remove the scheduled branch-protection audit",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T08:17:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "27d84c7b24d67a3195df983afa38d07bb721801c",
          "body": "ci: pipeline hardening — sdist hygiene, publish guard, build-check (v0.22.1)",
          "is_bot": false,
          "headline": "Merge pull request #33 from arpitarya/ci/pipeline-hardening",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T08:15:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05cc6af0615556beb9749ea6c105f93cc4fb24f3",
          "body": "…0.22.1)\n\nReview findings fixed:\n- hatch sdist excludes: /archive (the old build shipped inside the 0.22.0\n  sdist), /uv.lock, /.github, /scripts, .DS_Store — plus a CI assertion that\n  the sdist stays clean (root-level archive only; docs/archive is intended)\n- publish.yml: release-tag ↔ __version__\n[…]\nwn gap needing repo admin: BRANCH_PROTECTION_TOKEN secret is unset, so the\nweekly protection audit will fail loudly until an admin PAT is added.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: pipeline hardening — sdist hygiene, publish guard, build-check (v…",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T08:14:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d90605e6618d24d89094bf3671fccde589b5cbe2",
          "body": "Committed on behalf of the parallel Cowork session (Arpit): glossary renamed\nto GLOSSARY.md with frontmatter stripped; convention recorded in CLAUDE.md §OKF\n— ALL-CAPS markdown files are entry points exempt from OKF frontmatter; bundle\nindex updated.",
          "is_bot": false,
          "headline": "docs: GLOSSARY.md + ALL-CAPS-no-frontmatter convention",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T08:14:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b25697df708c69d1bb99aa12867d904c55aeaf18",
          "body": "release: Fux rebuild v0.22.0 — query CLI v1 + web/CDP/advanced ingest v1.1 + hybrid engine v2 + restored merge wall",
          "is_bot": false,
          "headline": "Merge pull request #32 from arpitarya/release/v0.22.0-pipeline",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-21T08:07:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4aeea51a981735f20ae8c65cbd7751b21ffbf6bf",
          "body": "- ci.yml: required contexts 'fux gate' (both suites = determinism, goldens,\n  eval gate, packaging budgets) + 'ai-review' (scripts/ai-review.sh —\n  separation of duties, $0-law probe, credential probe, suites on the merge\n  result; deterministic/model-free) + 3.11-3.13 matrix job\n- publish.yml resto\n[…]\n.json (note refreshed) + audit/\n  apply scripts restored — the wall stays watched\n- README: pip install fux-engine; registry row + worklog entry\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: restore the merge wall + release pipeline for the rebuild",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T08:06:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ae35653b9a42d0fa36d678ed99f2055a7290f773",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: correct final test count in fux-plan (172 unit + 29 e2e)",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:59:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "095bd33d752d6a9cab29c9e0ffeef4056df462ee",
          "body": "…run complete\n\nADR 0006 (bundled model: recipe, sha pin, eval numbers — gate passed as tie,\nships enabled; open Qs 1-3 resolved) + ADR 0007 (RRF fusion, no-reranker\nstance, v1 byte-parity). 0003 pair + 0000 master prompt archived\nstatus: implemented. README tells the full story (hybrid engine, corpu\n[…]\ne.\n\nFinal state: tests/ 172 passed · tests_e2e/ 29 passed + 1 gated skip · eval\ngate green · wheel 6.98 MB with the 7.93 MB bundle · fux 0.22.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release(0003 + master): hybrid engine v2 close-out — v0.22.0; master …",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:58:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7262375a28f5377ff57314048deeabe979a9188d",
          "body": "…kaging\n\nM4: .fux/index/vectors.bin — single packed file (open Q2), (sha, fidelity)-\nkeyed reuse mirroring index reuse, None-vector flags for all-OOV chunks,\npermissive load → rebuild. Built at ingest ('N chunks embedded').\nM5: hybrid retrieval — BM25F candidates (pool 200) + dense similarity over\nc\n[…]\ndle 7.93 MB ≤ 10 MB,\nasserted in e2e); warm latency measured: model load 10 ms, hybrid query\n0.2 ms (<100 ms requirement). Hybrid goldens added.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0003-M4..M7): vector cache, RRF hybrid retrieval, eval gate, pac…",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:55:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "30741cc71cb52ac641db223f68dce2252a87fac7",
          "body": "M2: tools/distill (dev-only) — potion-base-8M (MIT, license-checked) → int8\nper-vector quantization → packed model.bin (7.93 MB ≤ 10 MB budget, sha\npinned) + metadata + runtime reference fixtures (tokenizer parity samples,\nmatrix spot checks, semantic triples). Recipe + format documented.\nM3: fux.em\n[…]\ne once), lazy singleton, 1024-token truncation policy, missing-bundle\n→ None / corrupt → FuxError. 10 unit tests incl. stdlib-only import guard.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0003-M2/M3): distillation pipeline + stdlib embedding runtime",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:48:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b85612782a987f1552c279ea7ddf59b9b8286941",
          "body": "tests_e2e/eval/: 21 Q→passage pairs vs the fixture corpus (incl. deliberate\nzero-term-overlap paraphrases so the hybrid gate has room to discriminate),\nrun_eval.py (real-CLI scoring; --project/--pairs for private Anton evals),\nREADME with the Anton workflow, suite-wired baseline test.\nRecorded lexical-v1 baseline: hit@1 0.762 · hit@5 0.952 · MRR 0.833 (n=21).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0003-M1): eval harness — committed pairs, hit@1/hit@5/MRR runner",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:44:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2e78c8c9f0e9c715195bc40cfed869b58f8a76ac",
          "body": "ADR 0005 (web+CDP+advanced; open questions resolved: hand-rolled HTML→MD\ndefault, fixed settle delay, resumability deferred). 0002 pair archived with\nstatus: implemented. README/plan/registry/cli-examples/worklog/interview\nupdated. Suites: 154 unit + 24 e2e (+1 gated skip).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release(0002): Ingest v1.1 close-out — v0.21.0",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:39:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "202e38cc9176c1c4774affcb899d82cd8a8d2211",
          "body": "stdlib http.server fixture (served copy of tests_e2e/site + runtime oversize\nattachment): crawl flow with url/parent/depth provenance, robots.txt\ndisallow, off-domain + size-cap skips surfaced in --list-skipped, attachment\nconversion, URL citations in ask/answer (no fabricated line numbers),\nbyte-id\n[…]\ndex never import\ningest.web/cdp/ws; no urllib/socket outside the ingest package.\nmanual_cdp_smoke.py documents the Chrome-required manual smoke.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0002-M5): web e2e against local fixture site + import-fence test",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:36:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "026dfcc415609f5b2d82c56d5e68be25967b1193",
          "body": "Docling (office/PDF) + tesseract subprocess (image OCR) upgrades, absent-safe\nwith actionable FuxErrors; fidelity flips in cache frontmatter + manifest;\nindex reuse is now (sha, fidelity)-keyed so upgraded text re-chunks despite\nunchanged source sha; upgrades survive plain re-ingests and honestly re\n[…]\n\nwhen the source changes; web entries re-fetch inside the ingest fence.\nAGENTS contract + fux-ingest skill teach the judge-and-upgrade workflow.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0002-M4): advanced fidelity tier — fux ingest --advanced",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:35:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "018ac9fbd18178746a94f586a77d6c01785d43ab",
          "body": "ws.py: handshake with Sec-WebSocket-Accept validation, masked client frames,\n16/64-bit lengths, fragmentation reassembly with inline ping/pong, close —\nunit-tested against RFC 6455 vectors (§1.3, §5.7) and a fake socketpair\nserver. cdp.py: Chrome discovery/launch (existing install only, never\nbundle\n[…]\n →\nsettle delay → Runtime.evaluate outerHTML; websocket-client extra as flagged\nfallback; FuxError guidance for no-Chrome/port-busy/never-loads.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0002-M3): hand-rolled RFC 6455 WebSocket client + CDP capture",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:33:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b71bb641e88fa301f58bb74673b9c879e54e8436",
          "body": "M1: stdlib html.parser converter (headings/lists/tables/links/images/pre/\ninline code/blockquotes, whitespace-deterministic) + link extractor (base-tag,\nfragment/mailto/js filtering) + title capture.\nM2: [sources.web] config (urls/max_depth/same_domain/allow/attachments/budget/\ndelay_s/max_fetch_kb/\n[…]\natch (byte-stable re-crawl); --check/quick-drift exclude web origins\n(check path never touches network); web skips persisted for --list-skipped.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0002-M1/M2): HTML→Markdown converter + fenced web crawl",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:31:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e63c98b36e04b3f5c2b39903ebbfab6c6fa9704b",
          "body": "- ADRs 0001-0004 (config/setup, ingest+cache+chunker w/ determinism deviation,\n  BM25F+query w/ measured JSON-index decision, agent integration)\n- Output surface aligned to docs/cli-examples.md as the normative UX contract:\n  --check advisory + --strict->2, JSON path/line_start/line_end/heading_path\n[…]\nrview updated\n- 0001 handoff+prompt archived with status: implemented + ADR links\n- suites: tests 108 passed; tests_e2e 20 passed + 1 gated skip\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release(0001): Query CLI v1 close-out — v0.20.0",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-21T07:24:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "663de2c10dceafdac2654f7eee304f0377bbcd06",
          "body": "…inism\n\nReal-CLI subprocess flows over a committed 12-file corpus (nested-heading md,\nfrontmatter ADR, unicode name+content, no-headings, binary-as-md, txt, py,\njson, yaml, png, pdf+docx behind skipif). Normalized-JSON goldens (3 dp,\nvolatile keys stripped, FUX_UPDATE_GOLDENS=1 to update deliberatel\n[…]\n(skip_reason shared between convert and check_drift); answer engine\ngained stopword-free overlap + relative keep floor after smoke showed noise.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0001-M7): maintained e2e suite — fixture corpus, goldens, determ…",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-20T19:53:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c3c59386f4d12fd90b01ca922648a14b7d0cdf47",
          "body": "One contract rendered into every surface: AGENTS.md canonical managed block,\nCLAUDE.md/copilot-instructions/Kiro-steering pointers; fux-query + fux-ingest\nSKILL.md pair (Agent Skills open standard); Claude Code UserPromptSubmit +\nStop hooks via fail-open 'fux hook' entrypoints (trace under FUX_DEBUG=1);\nKiro hook. Managed blocks idempotent, user content never touched;\n.claude/settings.json merged, never clobbered.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0001-M6): agent integration — AGENTS.md, pointers, skills, hooks",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-20T19:50:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "81d78493d64ef047d0135287dd870ca0a7cdf8c6",
          "body": "M3: sorted deterministic walk (type→dirs mapping), converters (md/txt/code/\njson/yaml/image-stub/office-via-extra), OKF cache with provenance frontmatter\n+ per-dir index.md, canonical manifest.jsonl, --check/--list-inferred/\n--list-skipped, heading-based chunker (256-512 words, fences/tables atomic,\n[…]\n-C.\nM5: extractive answer — sentence split with line tracking, TextRank\ncentrality × question overlap × passage score, document-order citations.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0001-M3/M4/M5): ingest pipeline, BM25F index, ask/find/answer",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-20T19:47:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aa202c9a8b21353ecf2bd2dc038ed05f8b37ee23",
          "body": "…tter parser\n\nM1: config load/validate (tomllib, FuxError messages), find_root walk-up,\nfux setup (wizard, every prompt has a flag, -y, idempotent merge preserving\nuser keys), CLI subcommand skeleton for ingest/ask/find/answer/hook.\nM2: subset-YAML frontmatter parse/dumps — scalars, lists, nested maps,\nliteral blocks; permissive on malformed input; unknown keys round-trip.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(0001-M1/M2): fux.toml config + setup wizard, hand-rolled frontma…",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-20T19:37:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "524d194670ad620992333c0e89282e25fb1fcba9",
          "body": "Commits the Cowork-staged baseline: src/ package skeleton (0.19.0, CLI +\nFuxError, smoke tests), the full docs/ OKF bundle (compare verdicts, handoffs\n0000-0003, trackers), CLAUDE.md, README, pyproject.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "baseline: rebuild skeleton + decided docs bundle (pre-0001 state)",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-20T19:33:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "72b5a08ee48400b3faa189bc902cc223ff3355d8",
          "body": null,
          "is_bot": false,
          "headline": "chore: archive existing tool + docs; starting fresh",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-20T17:02:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e97275b6ba7cc06b21e710d6e3e6e788cb295ec",
          "body": null,
          "is_bot": false,
          "headline": "chore: archive existing tool + docs; starting fresh",
          "author_name": "Claude (agent)",
          "author_login": null,
          "committed_at": "2026-07-20T17:02:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8018a2d823263ba82ddd03a9af6a592e9560946a",
          "body": "…er, --no-xref, byte-deterministic builds (v0.18.0, Q1) (#31)\n\nThe fix for Fux's \"hard time at 23k nodes\" and the replacement for Graphify's\ngraph.html + Obsidian navigation. First item (Q1) of the master build queue.\n\nViewer (fux/assets/graph_boot.js, graph_template.html):\n- Level-of-detail: above \n[…]\nion.md, README, whats-new; version\n0.18.0. Roadmap/orchestrator specs added under docs/.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: navigable graph at scale — viewer LOD + ego-graph, build profil…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-01T06:28:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "80cb2ae22f6cfab9c4cbf92001a7e9de836e1c26",
          "body": "…lab Cycle 3) (#30)\n\nTwo real bugs surfaced by the fux-lab harness's Cycle-3 pass.\n\n1. Stored XSS (security). graphhtml.render embedded the graph as\n   `<script>const DATA = json.dumps(graph, ensure_ascii=False)</script>`, and\n   json.dumps does not escape </>/&. A rule's free-form `domain` (which c\n[…]\ned_and_respects_gitignore. Bundle regenerated.\nVersion → 0.17.4. Full suite: 374 passed.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: stored-XSS in graph.html + pii-scan untracked gap (v0.17.4, fux-…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-01T04:45:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce7ddab9578fbbdf8e8ebf1d1ef16a526d61d7c4",
          "body": "`fux savings` hard-coded the word \"cheaper\" and could print a negative \"you save\".\nOn a small corpus Fux's per-lookup overhead exceeds reading the file directly, so\nit reported e.g. \"1.9× cheaper\" / \"you save: -377 tok\" for output that is actually\n1.9× COSTLIER. For a tool named savings, labelling a\n[…]\nl assert cheaper/you-save. Bundle regenerated.\nVersion → 0.17.3. Full suite: 372 passed.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: direction-honest `savings` output (v0.17.3, fux-lab Cycle 2) (#29)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-01T04:28:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dc07e0cbf0fb2e3a9d12979fc955fa77177451cd",
          "body": "… Cycle 1) (#28)\n\nThe fux-lab harness, deepened with 20 behavioral oracles, showed the `why\n<unknown>` error-contract fix in 0.17.1 was systemic. These commands printed\n`fux: <msg>` to stdout and returned 1, bypassing the FuxError boundary — they now\nraise FuxError so main() renders the terse `error\n[…]\nt FuxError. Self-knowledge\nbundle regenerated. Version → 0.17.2. Full suite: 371 passed.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: error-contract consistency across CLI commands (v0.17.2, fux-lab…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-01T04:17:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c388f78dc3efb8e5da4db3a988dae233dcb21f5e",
          "body": "…s) (#27)\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v0.17.1 (harness-driven error-contract + seal-stability fixe…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-01T04:02:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "561e6ba542f8f9599be8f86e85eb3ab387eac45f",
          "body": "The external fux-lab harness (exhaustive, offline, $0 e2e suite over the whole\nregistry) surfaced two real engine bugs. Both fixed here with tests; the harness\nnow reports 0 findings.\n\n1. Error contract — `fux why <unknown>` printed `fux: no rule '…'` to stdout and\n   returned 1, bypassing the FuxEr\n[…]\n.py (scalar-like\nstring round-trip is a fixed point). Full suite: 366 passed, 2 skipped.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: error-contract + seal-stability findings from fux-lab harness (#26)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-07-01T03:59:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3d572be8af9561368a36b0464fe4880f45a9ce7e",
          "body": "…exit-code contract) (#25)\n\nMake fux's CLI and hooks robust without weakening strict-mode blocking or hiding\nreal bugs. Errors are caught + rendered only at the boundaries (CLI main, hook\nentrypoints, MCP dispatch, installer); internals keep raising.\n\n- fux/errors.py: one thin FuxError(Exception) — \n[…]\nlgen), the tier-scrutiny\nADR (docs/decisions/0002), and the parity command decommission.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.17.0 — error-handling hardening (fail-open hooks, FuxError, …",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-30T04:53:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a72244bc9d33ff36c97fed349d64557ec5fb2af8",
          "body": "…atify) (#24)\n\nCloses the authoring loop: the agent that wrote the code proposes the\nrules-with-why; you only ratify. Drafts land in the persistent, never-blocking\nreview surface .fux/CANDIDATES.md.\n\n- fux/candidates.py — the shared candidates surface: pending|accepted|rejected\n  triage state, dedup\n[…]\nmd, fux-plan §24a, fux-implementation, README, whats-new. self-build\nbundle regenerated.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.16.0 — Rule Proposer (agents author rules-with-why, humans r…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-29T05:39:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "68ccbd3d66249b88784144b806393f519eb9a06b",
          "body": "…) (#23)\n\nCloses the residual enforcement gap: a stray PAN/Aadhaar/account number\nin a non-plan .py/.md was only caught by a local hook (bypassable via\n--no-verify, absent from CI). dante's BLOCK-tier regexes, ported to a\nhand-rolled stdlib probe (no pip dependency on dante), wired into the\nrequired\n[…]\ntest file.)\nDocs: README, whats-new, cli.md (regenerated), fux-plan, fux-implementation.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.15.0 — PII content gate probe (dante regexes → stdlib, in CI…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-29T04:46:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c95f32df7c7cac93edfdcb4d852559d0397f7c9b",
          "body": "A connector source class distinct from file/URL: the AGENT pulls\nstructured, server-side-filtered data via the existing MCP connectors /\nAPIs; fux NEVER builds a client or calls an API ($0, client-free). The\nsame reduce → draft → review-queue → govern pipeline then runs, and items\nare low-trust (tru\n[…]\n unbounded.\nDocs: README, whats-new, cli.md (regenerated), fux-plan, fux-implementation.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.14.0 — connector ingestion (Jira/Confluence/GitHub, PR4) (#22)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-29T04:37:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "de3caee1f78ad98bd5c7b94c51182d3754fed0c2",
          "body": "…hats-new.md (#21)\n\nThe README's What's new had grown to a dense paragraph per release. Keep\nonly the latest headline + a link on the front page; move the full\nper-version detail (v0.4.0 → v0.13.0) verbatim into docs/whats-new.md.\n\nDocs-only; no code change.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: trim README \"What's new\" to a one-liner; move history to docs/w…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-28T21:12:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a64ad38405e452ca074c8fbd9f95c6a1f568e290",
          "body": "When a /fux debate or decision-council concludes, fux captures the\nverdict as an ADR and routes it to the right store by content — the\nstanding rule (world/code→fux, app→anton, money→elgar) made mechanical.\n\n- decisioncapture.py (≤100) — build_adr formats the verdict; capture\n  seals it with ratific\n[…]\nking `firewall`.\nDocs: README, cli.md (regenerated), fux-plan.md, fux-implementation.md.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.13.0 — decision capture (routed, tamper-evident ADRs) (#20)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-28T21:09:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "67e4b41f131b77b8ac399f0a340bd774f5aad637",
          "body": "`fux self-build` runs fux's own $0, AST-only graph extraction over the\n`fux/` package + resolves its `.fux/rules`, and writes a pre-built\nfootprint mirror to `data/self/` (shipped in the wheel). The `--self`\nscope on `query`/`path`/`explain`/`recall` points those existing\ncommands at that bundle ins\n[…]\n README, cli.md (regenerated from registry), fux-plan.md,\nfux-implementation.md updated.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.12.0 — self-build + --self (\"fux explains fux\") (#19)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-28T20:44:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c4052d031264f0bf46d2202ac0f1604147e03446",
          "body": "Check in the planning/reference docs that were authored alongside the\nbatch-ingest work but are not code:\n\n- ADR 0001 (docs/decisions/0001-fux-elgar-relationship.md) — the\n  custody-not-hierarchy decision: fux may own the routing decision but\n  NEVER retains or derives the confidential money payload\n[…]\n + prompt (item 2 spec).\n\nReference material only — no engine code, no behaviour change.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: backlog handoffs + ADR 0001 (fux↔elgar money firewall) (#18)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-28T20:26:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1642c750688ff4b0f39a42174b148fc57c2ba98b",
          "body": "`/fux ingest` now takes many URLs/files/globs at once — the engine\ndeterministically expands globs and dedups by `source_hash` (ingestqueue),\nthe agent loops the single-source pipeline over each (partial-failure-\ntolerant), and output is a draft review queue at `.fux/ingest/queue.md`\n(`fux ingest --\n[…]\ntch.py + guard green).\nDocs: README, cli.md, fux-plan.md, fux-implementation.md updated.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.11.0 — batch + linked-document ingestion (PR3) (#17)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-28T20:24:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d80ad5fc2f53417bf39a601ae240fc2a69d3482d",
          "body": "Generalizes /fux scrape (URL-only) into /fux ingest <url|file>: the agent\nextracts a URL, PDF, Excel/CSV, TXT/Markdown, or image (its own pdf/xlsx/vision\nskills do the reading; the engine never imports one), classifies trust, and\ndrafts status: draft rules carrying source/source_type/fetched/source_\n[…]\nded to prove\nno PDF/Excel/OCR/vision library is reachable from the engine path either.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.10.0 — ingest from files, not just URLs (PR2) (#16)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-24T07:10:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ad3e9747e838f42f0ae7451ecb65373865be967e",
          "body": "… CLI help (#15)\n\nOne command registry (fux/registry.py) now drives a grouped `fux --help`,\n`fux help <cmd>`, and a regenerated docs/cli.md table — help and docs can no\nlonger drift. `fux how \"<question>\"` dogfoods the existing $0 BM25F recall\nover that registry + self-docs to answer with the exact \n[…]\nest extended to prove no LLM or\nnetwork import is reachable from the maintenance path.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.9.0 — web-rules scrape skill, fux how, CDP config, generated…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-23T20:02:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7cc473da48ae6db0f8fca506fa815b2338176dd8",
          "body": "…f (#14)\n\n- README \"What's new\" stopped at v0.6.0; add the v0.8.0 (Solar Terminal viewer\n  overhaul) and v0.7.0 (cage token-savings receipt) entries so it reflects the\n  current release.\n- Commit the graph-viewer improvements handoff (the design spec the v0.8.0\n  viewer work was built from) into docs/ alongside the existing prompts doc.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.7.0/v0.8.0 to README What's new + check in viewer handof…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-21T17:40:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f1f31e1891bdb967d173c361b737339ecb712f41",
          "body": "… (#13)\n\nRework the interactive graph.html viewer end-to-end so it stays smooth at\nthousands of nodes and becomes a decision tool. Zero runtime deps, one\nself-contained offline file, deterministic $0 build, same Solar look.\n\nPerformance (largest test graph ~2,356 nodes / 14,744 edges, headless Chrom\n[…]\nchange; tests added (test_graph_drift.py) + render-contract\nmarkers updated. 222 passed.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.8.0 — Solar Terminal viewer: fast, legible, governance-aware…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-21T17:33:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "114c2c8ac89e4e8b0703365960be69d4cf23d186",
          "body": "Removed the emphasis on starring the repo in the README.",
          "is_bot": false,
          "headline": "Update README to simplify red-pipe problem suggestion (#12)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-20T19:13:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33d4554d74f0bf53f7e7bf07bdc5d273051a8917",
          "body": "- fux/cage_receipt.py: fail-open lazy shim; hook-recall files a `tool=\"fux\"`\n  token-savings receipt (distilled payload vs selected rules' whole source files,\n  method=modeled, confidence=0.7). cage stays optional — byte-identical with cage\n  absent. Counts only, no rule text/PII.\n- docs: move const\n[…]\nll in fux-implementation.md.\n\nzero new runtime dependency (stays []). 217 tests passing.\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.7.0 — optional cage token-savings receipt + docs reorg (#11)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-19T07:22:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a259401c15f9253a419307a4841a34efb19613d9",
          "body": "Docs-only. Reword the README \"story\" intro line. No engine/command/schema/dep change.\n\nAgent: claude-code\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v0.6.2 — README copy edit (#10)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-18T20:29:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "77d46bb535a1c0b99888b93371f1ab94b7100198",
          "body": "Docs-only. Rewrites the README around the \"red pipe\" story with a fux why\nwalkthrough, badges, constitution overview, collapsible command surface, and\nhonest-limits section. Preserves the absolute-URL PNG logo (renders on PyPI)\nand all doc links. No engine/command/schema/dep change.\n\nAgent: claude-code\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v0.6.1 — README rewrite (the red-pipe story) (#9)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-18T19:53:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e0b6d13c6b4d6e48722aaa8cf0136d309e77325c",
          "body": "- bump __version__ 0.5.1 → 0.6.0; CHANGELOG [0.6.0]; README \"New in\" banner;\n  implementation-doc version banner.\n- PyPI README image fix: PyPI strips relative paths AND <img> SVGs, so the\n  logo never displayed. Render fux-lockup.svg → fux-lockup.png (rsvg, 2x) and\n  reference it by absolute raw.githubusercontent URL — displays on GitHub + PyPI.\n\nAgent: claude-code\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v0.6.0 — the wall is real + fix PyPI README image (#8)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-18T19:01:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cc92f1d6c75f4df9dbb0d356e36bb915efa743a1",
          "body": "…ent §2R) (#3)\n\n* ci: add ai-review check + Claude Code git identity (enforcement §2R)\n\nThrowaway-then-real: registers the `ai-review` CI check (separation of\nduties — refuses when reviewer==author; model-free constitutional second\npass) alongside `fux gate`, and the committed Claude-Code git identi\n[…]\n.\n\nAgent: claude-code\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude (agent) <claude-code@fux.local>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add ai-review required check + Claude Code git identity (enforcem…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-18T18:49:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0e18f98b8602f65225dab7850e2f2fdaa6cbf96e",
          "body": "Infrastructure-only patch. The constitutional `fux gate` is now a required,\nmerge-blocking status check on main, with branch protection captured as code.\nNo engine/command/schema change.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v0.5.1 — fux gate is now a required merge gate (#2)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-18T03:12:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d2f8740024a13fd7df19c2e9183fb934526eb4cd",
          "body": "* ci: add `fux gate` job + require it via branch protection\n\nAdds the constitutional merge gate as a CI job (\"CI / fux gate\") and\ncaptures the intended `main` branch protection as code so it is diffable\nand reproducible, per docs/constitution-enforcement-handoff.md §2.\n\n- .github/workflows/ci.yml: n\n[…]\ngh a green-gate PR. Restore the 1-review rule\nif a second maintainer joins.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add `fux gate` job + require it via branch protection (#1)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-18T03:10:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6a554d358747e4b22a6b5d1da0ef15564b6f400f",
          "body": "…by supersession\n\nF1 — Advisory-first critic. Judgment principles now SUGGEST, not block, by\ndefault; only deterministic hard-invariants (money/PII/audit/numbers) block.\nA repo escalates a trusted judgment principle to blocking via\n`critic_block_judgment` in .fux/config.toml (true, or a list of ids)\n[…]\ny edit re-stamped under the same id.\n\nTests: 208 pass (+7). Docs: plan §7d, implementation, cli.md, README, critic +\ndebate skills all updated.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(constitution): v0.5.0 — advisory-first critic + first amendment …",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-18T02:03:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b712b6a89dac948d2f9bbd01e4f43aea5498e7be",
          "body": "…ogfood ritual\n\nRed-team remediation (R1/R2): closed all three mechanical SLIPs (rows 2, 4, 5) with\nminimal, tested changes. Added provenance-drift detection (Phase 3b, had been missing),\nfixed un-ratified/promoted-tier check (Fix A), built `fux constitution` status view.\n\n**Mechanical fixes (all te\n[…]\nrrection lane (you ruled: adopt this; implement in Phase-2).\n\nTests: 202 passed, 2 skipped (204 collected); zero failures. All invariants hold.\nCo-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(constitution): Phase 3b provenance + Phase-4-fix status view + d…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-17T20:51:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "500942a3262bb642af2a0041f261f4e1a165c4c6",
          "body": "Cuts the feature release that lands the constitution layer (Phases 0–5):\ntiered governance, tamper-evident ratification + `.fux/constitution.lock`,\n`fux ratify`, the two-agent `/fux debate`, the deterministic/judgment split,\nthe critic loop + `fux critic`, the report-first coverage gate, and the opt\n[…]\nmentation: flip constitution/debate/critic to done, v0.4.0\n- 195 tests; pytest + fux build && check + fux gate clean; package builds (twine OK)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v0.4.0 — the constitutional-app engine",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-16T21:05:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "52f14430ebf91610f0bcc7f93b1d7ab729cd4b05",
          "body": "Critique→act loop at the action boundary, behind an opt-in [critic] extra; the\ndefault install stays model-free ($0).\n\n- criticloop.py: critique() = gather (recall) → DETERMINISTIC pass first\n  (check:/seal, blocks, no LLM) → judgment principles to a `judge` seam\n  (host agent by default; needs-judg\n[…]\nmodel-free.\n- pyproject: critic = [\"anthropic>=0.40\"]; dependencies = [] unchanged.\n- Docs (plan/implementation/cli/README) updated; 195 tests.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(constitution): Phase 5 — critic loop + report-first coverage gate",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-16T21:01:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "acabf6037898bb1b4fd2243af6f9ab52d88a1de1",
          "body": "… guide\n\nImplement the deterministic/judgment router (fux/critic.py): principle +\nenforcement schema fields (both optional). for_ai() returns judgment\nprinciples only (a deterministic one can never reach the AI pass);\nfor_deterministic() returns deterministic only (a judgment one is never\nrun as a c\n[…]\nype) but are\nuntagged — a backfill guide that never blocks, even on the apex. The AI\ncritic loop itself (Phase 5) will consume only for_ai().\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(constitution): Phase 4 — deterministic/judgment split + backfill…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-16T20:46:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d0209f9a61a038a6b929843d34cdbe0179013c92",
          "body": "Implement /fux debate skill: a two-agent free debate (blind first passes,\nanti-sycophancy gates, human ratifier) that produces a transcript. fux\nratify --debate <file> hashes it into ratification.debate_hash (the audit\nrecord). Add the no-LLM-imports guard test — the maintenance/enforcement\npath (ch\n[…]\nimports no model client, and the\ndefault install is model-free. All Fux code is deterministic; the\nintelligence is the host session's tokens.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(constitution): Phase 3 — two-agent debate engine + guard test",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-16T20:40:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "51370591e8d1913a8457eca76a8589965c0c85bb",
          "body": "Implement constitutional integrity: a ratified constitutional rule\ncarries ratification.content_seal (hash of normalized body + frontmatter)\nand is recorded in a committed .fux/constitution.lock. fux check\nrecomputes both → always-blocking tampered finding. fux ratify <id> is\nthe deterministic-only \n[…]\n\napply to ratified constitutional rules only; all other rules untouched.\nPhases 0–2 ship in this change; Phase 3+ (debate + critic) deferred.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(constitution): Phase 2 — tamper-evidence, ratification, lock",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-16T20:21:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8b0c38ed323e0c76d551c4a126c7500833cc3254",
          "body": "…guard\n\nImplement tier-aware blocking (constitutional rules block in any mode,\nstandard only under strict, advisory never); add schema.json tier field\n(additive, defaults to standard); add the §5b migration guard (fux check\n--baseline-write and fux gate --baseline) to make upgrades backward-\ncompati\n[…]\nand gate; prove\nbackward-compat on fux's own rules; add canonical sorting for baseline\ndiffs. All new tests green, no existing rules regress.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(constitution): Phase 1 — tier blocking + §5b migration baseline …",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-16T18:41:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2cff5c60db117165eac8c06e7d4e71305c714b0b",
          "body": "Author the `con-amendment` constitutional rule (propose→debate→ratify,\nsupersession-only, named human ratifier required); add the Constitution\nlayer section to fux-plan.md; add the full constitutional-app engine\nbuild handoff spec (constitution-handoff.md) and execution prompts\n(constitution-prompts.md) covering Phases 0–8.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(constitution): Phase 0 — amendment article + build handoff docs",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-16T17:46:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bd6358c2da63299f54b5275e7b678bc3e718e76c",
          "body": "- fux savings now prices token wins in dollars using a configurable\n  usd_per_mtok rate (default $5.00/M = Claude Opus 4.8 input price);\n  every token line gains an ≈ $X.XX column and the ledger summary\n  shows cumulative dollar value\n- costledger.render_summary() accepts per_mtok and renders dollar\n[…]\nunciation note \"Pronounced 'fox.'\" added\n- New tests: usd conversion math, render shows dollars, config override,\n  costledger dollar summary\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(savings): report cost wins in dollars; rename INR refs to USD",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-15T10:36:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "46f50a67ff765107c45c9abcdb370c39fdbe63bf",
          "body": "First release exercising the fixed publish.yml (TestPyPI job removed,\nskip-existing enabled).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: release v0.3.2 — CI publish fix (no functional change)",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-14T11:50:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "10894ecc66e4f356f23c7506309a111ccd4fd66e",
          "body": "publish-testpypi failed every release (TestPyPI trusted publishing was\nnever configured), marking the whole workflow red even though the real\nPyPI publish succeeded. Remove it and add skip-existing: true so re-runs\ndon't fail on an already-published version.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): drop broken TestPyPI job, make PyPI publish idempotent",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-14T11:48:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d511e161911cb3a34ad7020aeee3fc90bcdb021a",
          "body": null,
          "is_bot": false,
          "headline": "Update cost ledger integration and graph assets",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-14T07:32:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4da97afe2c02843e2c933842596e5c680d17bf0f",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: README refresh — AlphaForge ecosystem context",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-12T18:13:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "31abf565da4a545cc27ad7c2e29fc823e7710eb2",
          "body": "… (v0.3.1)\n\n`fux hooks install` / `fux init` wired agent hooks to ~/.claude/fux/hooks/*.sh —\ncopied scripts in a tree whose `engine/` symlinks the dev checkout, so a committed\nsettings.json effectively pointed at a sibling dir, not the package.\n\nNow every hook invokes the installed console script di\n[…]\ntall rewrites a stale wrapper-path entry to\nthe `fux <cmd>` form in place, leaving foreign hooks untouched. +1 migration test.\n\n167 tests pass.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: hooks invoke the installed `fux` CLI, not copied wrapper scripts…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-09T16:59:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2608bd1694a723f636af532624c16911bc22b64e",
          "body": "…able graph\n\n`fux hooks install [--git --claude --codex --copilot | --all]` wires every agent\nsurface from one command (default: all four), idempotent, with `status` and\n`uninstall` mirrors:\n- git     → .git/hooks/pre-commit shim → packaged ~/.claude/fux/hooks/pre_commit.sh\n            (rebuild + st\n[…]\nscode|vscode-insiders|\ncursor|windsurf, default vscode).\n\n+10 tests (hookinstall roundtrip/backup/idempotence, graph link embedding). 166 pass.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.3.0 — `fux hooks install` (git+claude+codex+copilot) + click…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-09T15:42:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dfff70b6d339bdaee4619af537abbda017354c4a",
          "body": "… (v0.2.1)\n\n`_xref` iterated `call_names(text)` (a set) directly, so reference-edge order —\nand thus graph.json/graph.html — varied across builds under PYTHONHASHSEED. That\nmade committed .fux/out/ views churn on every rebuild even with no code change.\nSorting the iteration makes builds byte-reprodu\n[…]\nc; this was the sole source.\n\nAdds a regression test asserting reference edges are emitted in canonical\n(sorted) target order.\n\n157 tests pass.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: deterministic graph builds — sort _xref reference-edge iteration…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-09T15:25:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d215be2700fb8eff8fded4fa6b4001e8a6614ef8",
          "body": "…eedback)\n\nFour new deterministic $0 modules powering safe on-the-fly UI generation:\n- `fux impact`: blast-radius analysis; splits precise `calls` from loose\n  `references` to avoid noise from generic symbol names\n- `fux components`: design-system registry scanner (Props interfaces, use* hooks,\n  DT\n[…]\nCP (13 tools total). Orff emits a declarative UISpec\n(JSON tree, never code) — safe by construction. Plan §18 fully shipped.\n\n156 tests pass.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: v0.2.0 — §18 Orff brain pipeline (impact, components, uispec, f…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-09T12:27:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "49fbf2f738b01118857847ae8cbc8f5e9d9e1be5",
          "body": "…hor fallback\n\nRestore the EXTRACTED/INFERRED signal graphify carried, which the graph schema\nhad dropped — and stop the loose `references` xref (the dominant edge by raw\ncount) from drowning the precise signal in clustering and centrality.\n\n- graph.build now stamps every edge with `confidence` (EXT\n[…]\nedge_confidence (confidence/weight stamping, weighted pagerank &\ncommunity vote) and a hybrid anchor-fallback test. Full suite 141 → 147 green.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release v0.1.3: edge confidence + weighted graph, hybrid semantic-anc…",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-08T18:39:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a5cd6d4813e2812c1210904022aa3182590681c1",
          "body": null,
          "is_bot": false,
          "headline": "Add Codex and Copilot agent support",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-07T20:02:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b92f92f9850688acb577e651089df338fa7e7ee",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.1.1",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-07T09:24:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb9e9fbf31e7fc83d9e7136b78391993c7f890ce",
          "body": "Merges the query-code-anchors-costdown branch:\n\n- query: code-node anchoring with file:line ranked output + budget\n- feat: Solar Terminal graph viewer (full three-rail redesign)\n- feat: fux product mark across graph viewer, dashboard, README\n- feat: probes/ — graph viewer probe + authoring guide\n- feat: tree-sitter AST backend for JS/TS/Go/Rust\n- fix: O(n²) repulsion loop (2× perf + frame-stride)\n- feat: publishable PyPI package + fetch-rules skill",
          "is_bot": false,
          "headline": "Merge: query code anchors + Solar graph viewer + fux branding",
          "author_name": "arpit arya",
          "author_login": "arpitarya",
          "committed_at": "2026-06-07T09:06:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 30,
      "commits_last_year": 119,
      "latest_release_at": "2026-07-22T18:48:41Z",
      "latest_release_tag": "v0.24.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 2.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "fux-engine",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "adr",
            "agent",
            "claude",
            "codebase",
            "frontmatter",
            "graph",
            "knowledge",
            "llm",
            "rules",
            "Development Status :: 3 - Alpha",
            "Intended Audience :: Developers",
            "License :: OSI Approved :: MIT License",
            "Operating System :: OS Independent",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13",
            "Programming Language :: Python :: 3.14",
            "Topic :: Software Development :: Documentation",
            "Topic :: Software Development :: Quality Assurance"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/fux-engine/",
          "is_deprecated": false,
          "latest_version": "0.24.0",
          "repository_url": "https://github.com/arpitarya/fux",
          "versions_count": 31,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-06-05T19:03:01.164828Z",
          "latest_published_at": "2026-07-22T18:49:38.967260Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "example"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "archive/justfile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 55826,
      "source_files_sampled": 255,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md",
        "archive/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 23674
    },
    "dependencies": {
      "manifests": [
        "archive/pyproject.toml",
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 38,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 4
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "arpitarya",
          "commits": 101,
          "avatar_url": "https://avatars.githubusercontent.com/u/2118113?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "publish.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [
        "uv.lock"
      ],
      "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "10 out of 10 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/10 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 5,
            "reason": "5 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "cd9550687a15ffa157515882d3f188f31a7049cb",
        "ran_at": "2026-07-22T19:51:25Z",
        "aggregate_score": 3.5,
        "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-22T18:49:42Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-22T18:46:54Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/arpitarya/fux",
    "host": "github.com",
    "name": "fux",
    "owner": "arpitarya"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 56,
      "inputs": {
        "security": 35,
        "vitality": 75,
        "community": 24,
        "governance": 51,
        "engineering": 86
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 75,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 59,
            "inputs": {
              "commits_last_year": 119,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 7
            },
            "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": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "119 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 119
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 30,
              "latest_release_tag": "v0.24.0",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 2.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "30 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 51,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 65,
            "inputs": {
              "merged_prs": 38,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 4
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "38/42 decided PRs merged",
                "points": 34.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 38,
                      "decided": 42
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/10 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 48,
            "inputs": {
              "followers": 7,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "arpitarya",
              "public_repos": 19,
              "account_age_days": 5096
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "7 followers of arpitarya",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 7,
                      "login": "arpitarya"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "19 public repos, account ~13 yr old",
                "points": 21.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 19
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "fux-engine"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "31 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 31
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 86,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 16,
                "status": "met",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "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": "10 out of 10 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 35,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.5
            },
            "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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "10 out of 10 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/10 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "5 existing vulnerabilities detected",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 68,
        "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.97,
              "agent_instruction_files": [
                "CLAUDE.md",
                "archive/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 23674
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md, archive/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md, archive/CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "97 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 97,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "uv.lock"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [
                "archive/justfile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.81,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "archive/justfile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "archive/justfile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "81 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 81,
                      "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 0",
                "points": 0,
                "status": "missed",
                "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": 55826,
              "source_files_sampled": 255,
              "oversized_source_files": 0
            },
            "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": "0/255 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 255,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "example"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "example",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "example"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index pypi:fux-engine@0.24.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T19:51:42.236376Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/arpitarya/fux.svg",
  "full_name": "arpitarya/fux",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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