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

tellang / triflux

CLI-first multi-model orchestrator — routes tasks to Codex, Gemini, and Claude

JavaScriptMIT★ 7 estrellas⑂ 2 forksdesde mar 2026Ver en GitHub ↗

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

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

64
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

tellangCuenta personal
23 seguidores26 repositorios públicosdesde mar 2018

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
npmtriflux10.44.03571294hace 4 díasclaude-codeplugincodexantigravitycli-routingorchestrationmulti-modeltrifluxtfx

Métricas por categoría

Vitalidad

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

86Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 1 días
12.5/36Cadencia de commits — 18/52 semanas con commits
18/18Volumen de commits — 1445 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year1445
human_commit_share1
days_since_last_push1
active_weeks_last_year18
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 4 días
27/27Cadencia de publicación — una versión cada ~3,3 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count100
latest_release_tagv10.44.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases3,3
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?

47En riesgo · 18% del índice global
Cómo se puntúa
12.6/60Estrellas — 7 estrellas
0/25Forks — 2 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks2
stars7
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_template
Cómo se puntúa
47.4/80Descargas mensuales — 3571 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagestriflux
dependents
ecosystemsnpm
total_downloads
monthly_downloads3571
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

56Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
40.5/46.8Resolución de issues — 87% de issues cerradas
36.5/38.3Aceptación de PR — 277/290 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/22 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs277
open_issues27
closed_issues175
issue_closed_ratio0,866
closed_unmerged_prs13
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
9.9/25Alcance del propietario — 23 seguidores de tellang
22.4/25Trayectoria — 26 repos públicos, cuenta de ~8 años
Datos de entrada utilizados
followers23
owner_typeUser
is_verified
owner_logintellang
public_repos26
account_age_days3058
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 4 días
20/20Historial de versiones — 294 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagestriflux
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

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 — 3 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — biome.json
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 4 out of 4 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://www.npmjs.com/package/triflux
10/10Descripción del repositorio
10/10Topics — 10 topics
0/10Wiki
Datos de entrada utilizados
topicsai-routing, claude-code, claude-plugin, cli-orchestrator, codex-cli, developer-tools, gemini-cli, multi-model, task-automation, terminal
has_wikino
homepagehttps://www.npmjs.com/package/triflux
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?

38En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 4 out of 4 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/22 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
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
0/7.5Vulnerabilities — 30 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,8
Excluidos de la puntuación (sin datos o no aplicable): 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.

63Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 96 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,96
agent_instruction_filesAGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md
agent_instruction_max_bytes11.674
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — biome.json
11/11Verificación estática de tipos — jsconfig.json
10/10Entorno reproducible — lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsjsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — JavaScript con configuración de verificación de tipos (jsconfig.json)
54.1/55Tamaños de archivo manejables — 26/1586 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJavaScript
largest_source_bytes253.000
source_files_sampled1586
oversized_source_files26
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signal
api_schema_files

Datos clave

7estrellas de GitHub
1contribuidores
1445commits en los últimos 12 meses
1días desde el último push
100versiones publicadas
1factor bus
27issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 7 ★ / 2 ⇿
7Estrellas
2Forks
58Versiones

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

01345687212026-042026-042026-05
Mayor 1Menor 15Parche 42
OpenSSF Scorecard 3.8 / 10
3.8agregado

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 02:58 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests4 out of 4 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/22 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
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
0Vulnerabilities30 existing vulnerabilities detected
Dependencias directas 8
RegistroPaqueteRestricción de versiónManifiesto
npm@iarna/toml^2.2.5package.json
npm@modelcontextprotocol/sdk^1.29.0package.json
npmbetter-sqlite3^12.10.0package.json
npmpino^10.3.1package.json
npmpino-pretty^13.1.3package.json
npmsystray2^2.1.4package.json
npmtree-kill^1.2.2package.json
npmzod^4.0.0package.json
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "ai-routing",
        "claude-code",
        "claude-plugin",
        "cli-orchestrator",
        "codex-cli",
        "developer-tools",
        "gemini-cli",
        "multi-model",
        "task-automation",
        "terminal"
      ],
      "is_fork": false,
      "size_kb": 56423,
      "has_wiki": false,
      "homepage": "https://www.npmjs.com/package/triflux",
      "languages": {
        "HTML": 857305,
        "Shell": 437763,
        "Swift": 14175,
        "JavaScript": 14460412,
        "PowerShell": 12304
      },
      "pushed_at": "2026-07-20T09:30:44Z",
      "created_at": "2026-03-18T13:20:05Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T09:31:35Z",
      "description": "CLI-first multi-model orchestrator — routes tasks to Codex, Gemini, and Claude",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "tellang",
      "type": "User",
      "login": "tellang",
      "company": null,
      "location": null,
      "followers": 23,
      "avatar_url": "https://avatars.githubusercontent.com/u/37146362?v=4",
      "created_at": "2018-03-07T13:04:48Z",
      "is_verified": null,
      "public_repos": 26,
      "account_age_days": 3058
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v10.44.0",
          "kind": "minor",
          "published_at": "2026-07-17T07:35:07Z"
        },
        {
          "tag": "v10.43.0",
          "kind": "minor",
          "published_at": "2026-07-16T08:04:20Z"
        },
        {
          "tag": "v10.42.0",
          "kind": "minor",
          "published_at": "2026-07-07T05:59:43Z"
        },
        {
          "tag": "v10.41.1",
          "kind": "patch",
          "published_at": "2026-07-01T05:38:10Z"
        },
        {
          "tag": "v10.41.0",
          "kind": "minor",
          "published_at": "2026-06-29T08:11:21Z"
        },
        {
          "tag": "v10.40.0",
          "kind": "minor",
          "published_at": "2026-06-26T08:08:57Z"
        },
        {
          "tag": "v10.39.1",
          "kind": "patch",
          "published_at": "2026-06-19T07:27:03Z"
        },
        {
          "tag": "v10.39.0",
          "kind": "minor",
          "published_at": "2026-06-18T03:42:54Z"
        },
        {
          "tag": "v10.38.0",
          "kind": "minor",
          "published_at": "2026-06-18T02:12:23Z"
        },
        {
          "tag": "v10.37.0",
          "kind": "minor",
          "published_at": "2026-06-17T07:34:23Z"
        },
        {
          "tag": "v10.36.0",
          "kind": "minor",
          "published_at": "2026-06-16T03:07:24Z"
        },
        {
          "tag": "v10.35.3",
          "kind": "patch",
          "published_at": "2026-06-16T01:15:23Z"
        },
        {
          "tag": "v10.35.2",
          "kind": "patch",
          "published_at": "2026-06-15T03:06:37Z"
        },
        {
          "tag": "v10.35.1",
          "kind": "patch",
          "published_at": "2026-06-13T14:35:47Z"
        },
        {
          "tag": "v10.35.0",
          "kind": "minor",
          "published_at": "2026-06-11T07:51:04Z"
        },
        {
          "tag": "v10.34.0",
          "kind": "minor",
          "published_at": "2026-06-10T05:51:42Z"
        },
        {
          "tag": "v10.33.1",
          "kind": "patch",
          "published_at": "2026-06-09T07:05:26Z"
        },
        {
          "tag": "v10.33.0",
          "kind": "minor",
          "published_at": "2026-06-09T03:38:48Z"
        },
        {
          "tag": "v10.32.0",
          "kind": "minor",
          "published_at": "2026-06-08T06:14:24Z"
        },
        {
          "tag": "v10.31.0",
          "kind": "minor",
          "published_at": "2026-06-08T03:48:37Z"
        },
        {
          "tag": "v10.30.1",
          "kind": "patch",
          "published_at": "2026-06-08T03:11:06Z"
        },
        {
          "tag": "v10.30.0",
          "kind": "minor",
          "published_at": "2026-06-04T04:18:59Z"
        },
        {
          "tag": "v10.29.0",
          "kind": "minor",
          "published_at": "2026-06-02T01:56:41Z"
        },
        {
          "tag": "v10.28.1",
          "kind": "patch",
          "published_at": "2026-06-01T04:10:00Z"
        },
        {
          "tag": "v10.28.0",
          "kind": "minor",
          "published_at": "2026-05-29T08:53:36Z"
        },
        {
          "tag": "v10.27.0",
          "kind": "minor",
          "published_at": "2026-05-28T07:56:47Z"
        },
        {
          "tag": "v10.26.0",
          "kind": "minor",
          "published_at": "2026-05-28T01:16:40Z"
        },
        {
          "tag": "v10.25.1",
          "kind": "patch",
          "published_at": "2026-05-21T09:47:20Z"
        },
        {
          "tag": "v10.25.0",
          "kind": "minor",
          "published_at": "2026-05-21T02:45:28Z"
        },
        {
          "tag": "v10.24.0",
          "kind": "minor",
          "published_at": "2026-05-20T00:45:55Z"
        },
        {
          "tag": "v10.23.0",
          "kind": "minor",
          "published_at": "2026-05-19T07:52:30Z"
        },
        {
          "tag": "v10.22.0",
          "kind": "minor",
          "published_at": "2026-05-19T00:05:20Z"
        },
        {
          "tag": "v10.21.0",
          "kind": "minor",
          "published_at": "2026-05-16T04:45:16Z"
        },
        {
          "tag": "v10.20.2",
          "kind": "patch",
          "published_at": "2026-05-14T00:25:20Z"
        },
        {
          "tag": "v10.20.1",
          "kind": "patch",
          "published_at": "2026-05-12T00:51:46Z"
        },
        {
          "tag": "v10.20.0",
          "kind": "minor",
          "published_at": "2026-05-12T00:03:27Z"
        },
        {
          "tag": "v10.19.0",
          "kind": "minor",
          "published_at": "2026-05-11T03:59:33Z"
        },
        {
          "tag": "v10.18.2",
          "kind": "patch",
          "published_at": "2026-05-07T03:25:06Z"
        },
        {
          "tag": "v10.18.1",
          "kind": "patch",
          "published_at": "2026-05-07T02:57:46Z"
        },
        {
          "tag": "v10.18.0",
          "kind": "minor",
          "published_at": "2026-04-30T04:08:03Z"
        },
        {
          "tag": "v10.17.4",
          "kind": "patch",
          "published_at": "2026-04-27T14:04:04Z"
        },
        {
          "tag": "v10.17.3",
          "kind": "patch",
          "published_at": "2026-04-27T12:37:27Z"
        },
        {
          "tag": "v10.17.2",
          "kind": "patch",
          "published_at": "2026-04-27T12:03:39Z"
        },
        {
          "tag": "v10.17.1",
          "kind": "patch",
          "published_at": "2026-04-27T11:42:50Z"
        },
        {
          "tag": "v10.17.0",
          "kind": "minor",
          "published_at": "2026-04-26T05:10:57Z"
        },
        {
          "tag": "v10.16.0",
          "kind": "minor",
          "published_at": "2026-04-26T02:02:59Z"
        },
        {
          "tag": "v10.15.0",
          "kind": "minor",
          "published_at": "2026-04-25T10:07:16Z"
        },
        {
          "tag": "v10.14.3",
          "kind": "patch",
          "published_at": "2026-04-24T17:14:11Z"
        },
        {
          "tag": "v10.14.2",
          "kind": "patch",
          "published_at": "2026-04-24T14:23:32Z"
        },
        {
          "tag": "v10.14.1",
          "kind": "patch",
          "published_at": "2026-04-24T13:29:24Z"
        },
        {
          "tag": "v10.14.0",
          "kind": "minor",
          "published_at": "2026-04-24T06:30:17Z"
        },
        {
          "tag": "v10.13.10",
          "kind": "patch",
          "published_at": "2026-04-22T17:03:20Z"
        },
        {
          "tag": "v10.13.9",
          "kind": "patch",
          "published_at": "2026-04-22T16:18:50Z"
        },
        {
          "tag": "v10.13.8",
          "kind": "patch",
          "published_at": "2026-04-22T13:31:27Z"
        },
        {
          "tag": "v10.13.7",
          "kind": "patch",
          "published_at": "2026-04-22T10:29:37Z"
        },
        {
          "tag": "v10.13.6",
          "kind": "patch",
          "published_at": "2026-04-22T08:02:35Z"
        },
        {
          "tag": "v10.13.5",
          "kind": "patch",
          "published_at": "2026-04-22T07:00:47Z"
        },
        {
          "tag": "v10.13.3",
          "kind": "patch",
          "published_at": "2026-04-22T06:31:09Z"
        },
        {
          "tag": "v10.13.2",
          "kind": "patch",
          "published_at": "2026-04-21T06:41:01Z"
        },
        {
          "tag": "v10.13.1",
          "kind": "patch",
          "published_at": "2026-04-21T03:49:18Z"
        },
        {
          "tag": "v10.13.0",
          "kind": "minor",
          "published_at": "2026-04-20T15:35:09Z"
        },
        {
          "tag": "v10.12.0",
          "kind": "minor",
          "published_at": "2026-04-18T14:14:18Z"
        },
        {
          "tag": "v10.11.0",
          "kind": "minor",
          "published_at": "2026-04-18T07:12:48Z"
        },
        {
          "tag": "v10.10.0",
          "kind": "minor",
          "published_at": "2026-04-18T03:57:14Z"
        },
        {
          "tag": "v10.9.32",
          "kind": "patch",
          "published_at": "2026-04-17T17:15:51Z"
        },
        {
          "tag": "v10.9.31",
          "kind": "patch",
          "published_at": "2026-04-17T15:15:32Z"
        },
        {
          "tag": "v10.9.30",
          "kind": "patch",
          "published_at": "2026-04-17T14:03:45Z"
        },
        {
          "tag": "v10.9.29",
          "kind": "patch",
          "published_at": "2026-04-16T13:38:33Z"
        },
        {
          "tag": "v10.9.28",
          "kind": "patch",
          "published_at": "2026-04-15T11:52:05Z"
        },
        {
          "tag": "v10.9.21",
          "kind": "patch",
          "published_at": "2026-04-13T07:29:06Z"
        },
        {
          "tag": "v10.9.20",
          "kind": "patch",
          "published_at": "2026-04-13T04:24:28Z"
        },
        {
          "tag": "v10.9.16",
          "kind": "patch",
          "published_at": "2026-04-11T16:36:18Z"
        },
        {
          "tag": "v10.9.15",
          "kind": "patch",
          "published_at": "2026-04-11T15:52:48Z"
        },
        {
          "tag": "v10.9.14",
          "kind": "patch",
          "published_at": "2026-04-11T14:43:29Z"
        },
        {
          "tag": "v10.9.13",
          "kind": "patch",
          "published_at": "2026-04-11T13:48:54Z"
        },
        {
          "tag": "v10.9.12",
          "kind": "patch",
          "published_at": "2026-04-11T06:25:40Z"
        },
        {
          "tag": "v10.9.11",
          "kind": "patch",
          "published_at": "2026-04-11T06:21:01Z"
        },
        {
          "tag": "v10.9.9",
          "kind": "patch",
          "published_at": "2026-04-11T05:58:51Z"
        },
        {
          "tag": "v10.9.8",
          "kind": "patch",
          "published_at": "2026-04-11T05:56:24Z"
        },
        {
          "tag": "v10.9.7",
          "kind": "patch",
          "published_at": "2026-04-11T05:45:27Z"
        },
        {
          "tag": "v10.9.5",
          "kind": "patch",
          "published_at": "2026-04-11T04:51:35Z"
        },
        {
          "tag": "v10.8.1",
          "kind": "patch",
          "published_at": "2026-04-09T06:53:19Z"
        },
        {
          "tag": "v10.8.0",
          "kind": "minor",
          "published_at": "2026-04-09T06:15:03Z"
        },
        {
          "tag": "v10.7.1",
          "kind": "patch",
          "published_at": "2026-04-09T03:05:24Z"
        },
        {
          "tag": "v10.7.0",
          "kind": "minor",
          "published_at": "2026-04-09T02:47:09Z"
        },
        {
          "tag": "v10.4.0",
          "kind": "minor",
          "published_at": "2026-04-08T11:32:31Z"
        },
        {
          "tag": "v10.3.1",
          "kind": "patch",
          "published_at": "2026-04-07T08:40:51Z"
        },
        {
          "tag": "v10.2.0",
          "kind": "minor",
          "published_at": "2026-04-07T06:22:39Z"
        },
        {
          "tag": "v10.1.1",
          "kind": "patch",
          "published_at": "2026-04-07T00:48:29Z"
        },
        {
          "tag": "v10.0.0",
          "kind": "major",
          "published_at": "2026-04-05T16:01:17Z"
        },
        {
          "tag": "v10.0.3",
          "kind": "patch",
          "published_at": "2026-04-05T16:40:15Z"
        },
        {
          "tag": "v10.0.2",
          "kind": "patch",
          "published_at": "2026-04-05T16:37:05Z"
        },
        {
          "tag": "v9.1.0",
          "kind": "minor",
          "published_at": "2026-03-31T08:46:08Z"
        },
        {
          "tag": "v8.9.2",
          "kind": "patch",
          "published_at": "2026-03-29T23:21:37Z"
        },
        {
          "tag": "v8.8.1",
          "kind": "patch",
          "published_at": "2026-03-29T11:29:27Z"
        },
        {
          "tag": "v8.8.0",
          "kind": "minor",
          "published_at": "2026-03-29T11:23:42Z"
        },
        {
          "tag": "v8.5.0",
          "kind": "minor",
          "published_at": "2026-03-29T06:23:03Z"
        },
        {
          "tag": "v8.4.0",
          "kind": "minor",
          "published_at": "2026-03-29T04:09:21Z"
        },
        {
          "tag": "v7.4.0",
          "kind": "minor",
          "published_at": "2026-03-27T14:00:22Z"
        },
        {
          "tag": "v7.1.4",
          "kind": "patch",
          "published_at": "2026-03-27T00:05:29Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f1a981bf5e99bd546e7e0d4524d30062135230d2",
          "body": "Codex MCP transport 채널이 실행 중 죽으면 codex exec가 exit 0 + 빈 stdout으로\n끝나고, recover_codex_stdout이 stderr 크래시 노이즈를 STDOUT_LOG에 backfill해\nno-op 가드의 `! -s STDOUT_LOG`를 무력화 → 빈손 실행이 success로 오보고됐다.\n\n원칙(SSOT): 복구된 stderr는 진짜 워커 산출물이 아니다.\n- codex-recovery.sh: 복구 진입 시 CODEX_STDOUT_WAS_RECOVERED=1 노출 +\n  codex_st\n[…]\ndown 로그는 관측 오탐 방지 위해 이슈 미기록.\n\n테스트: 유닛 12 + e2e(exec-mcp-crash 승격 / exec-output-and-crash 성공유지).\n옛 코드에서 exit_code:0/success 재현(RED) → 수정 후 exit 68 승격 확인.\n경계(genuine+서명→성공) 잠금. touched surface 60 green.",
          "is_bot": false,
          "headline": "fix(tfx-route): 복구된 stderr 노이즈를 진짜 산출물로 오인하던 false-success 차단",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T08:57:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "38c17a0583b6ad5cba1fccb7d9f7142c2a46352a",
          "body": null,
          "is_bot": false,
          "headline": "test(hub): close B0 expiry sweep gaps",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6fd92b3bb57862ac9cac94e43fcc468807c0bca2",
          "body": null,
          "is_bot": false,
          "headline": "refactor(hub): remove orphan human request expiry",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69819f05c41aa91f06576c60790f2efe09de429c",
          "body": null,
          "is_bot": false,
          "headline": "test(release): cover core memory store mirror",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe481ed9373dde034ae5b58707bb2612d23e8550",
          "body": null,
          "is_bot": false,
          "headline": "fix(core): resync memory store mirror",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:43:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3cfb7b43d5460423f0395994b9f58042b547630",
          "body": "…xpiry sweep\n\nopus 적대 리뷰 MERGE_OK(§4 전항 PASS·신규 회귀 0). 실착지(Hub 재기동) 시\nDLQ 대량 전이 발생 — 착지 직전 expected set 재고정 게이트는 별도 이행.\n\nClaude-Session: https://claude.ai/code/session_01Xg168vibLBvFW9yKbn6mw6",
          "is_bot": false,
          "headline": "Merge branch 'feat/lane2-e-candb-b0' — candB B0 store-authoritative e…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T06:22:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08607f8b11413b911c01c9457e76ad68994ff37b",
          "body": null,
          "is_bot": false,
          "headline": "fix(hub): recover expired messages at startup",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T05:26:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f924476065a7593bba18af9bad5f0af3ef028fe",
          "body": "S01 locks unqualified clarification to the host and reserves tfx-interview for explicit TFX quantified flows; update the legacy unit assertion to that boundary.",
          "is_bot": false,
          "headline": "test(routing): align interview trigger contract",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T05:25:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74c30437cf56132f85c17fcc1ec5c2e62020eb21",
          "body": null,
          "is_bot": false,
          "headline": "fix(routing): narrow legacy trigger examples",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-20T00:59:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "366cd3e3adbc9057fd8967ad7a46524b70854cd8",
          "body": "…e-2 E 후속)\n\nopus 적대 교차리뷰 완료: P1(packages 미러 드리프트)=a35dc6bb로 수리,\nfull unit suite 3847/3842 pass·0 fail 실측 후 병합.\n원인 서술 교정(리뷰 P2-1): /tmp/cc-daemon-* 스캐너는 리포에 부재 —\n전체 suite RED의 실제 기제는 ambient 테스트가 실 ~/.claude configDir\n해시로 라이브 데몬에 접속하는 역방향 간섭으로 판정. tmpRoot 격리는\n방향과 무관하게 유효한 수리.\n잔여 P2 3건(기본 tmpRoot 검증 테스트 부재·동일 패턴 1건·/tmp 하드코딩)은\nmnk-callbot .tfx/plans/2000-p21-v12-followups.md 백로그에 기록.",
          "is_bot": false,
          "headline": "Merge branch 'feat/test-socket-isolation' — daemon socket 테스트 격리 (Lan…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T12:21:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a35dc6bbe47f37a183cbff14e7909c99631e80d1",
          "body": null,
          "is_bot": false,
          "headline": "test: sync package mirrors for daemon socket isolation",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T12:07:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8a1af407af394d710d4c69e713598da13fb4a74",
          "body": null,
          "is_bot": false,
          "headline": "test: isolate fake daemon sockets",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T11:23:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd01807e788f16174c57bb6267fa17bb560c46a2",
          "body": "…cle (Lane-2 E-A)",
          "is_bot": false,
          "headline": "Merge branch 'feat/lane2-e-presence-fencing' — fenced presence lifecy…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T09:50:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "daa65d4b109591154e948dde02666260d501fe89",
          "body": null,
          "is_bot": false,
          "headline": "test(hub): restore legacy heartbeat coverage",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T09:41:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7741974ec4b33f52d687098a3e42e1795fefdc4",
          "body": null,
          "is_bot": false,
          "headline": "fix(hub): make presence generation fencing opt-in",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T09:36:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86bdcc5f1d7489ccecefbbc950f4b05130bc834b",
          "body": null,
          "is_bot": false,
          "headline": "fix(hub): fenced presence lifecycle and identity gate",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T09:04:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fe3676b47614f60ab92bd447966346b5f050aa7",
          "body": "fix(release): prepare 테스트 출력 실시간 스트리밍 — 실패 로그 절단 제거",
          "is_bot": false,
          "headline": "Merge pull request #492 from tellang/fix/release-prepare-streaming",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T08:12:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b07dbf2c83cfe0ed74563e189394d748c29e2ad7",
          "body": null,
          "is_bot": false,
          "headline": "fix(release): 리뷰 반영 — 회귀 테스트 정합 + timeout/signal 진단 보존 + stdin ignore 유지",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T08:11:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e777a345f75a8f11a24c68772a0376e44d01ddf8",
          "body": "- npm-test 스텝 stdio inherit — GH Actions가 실패 테스트명을 보존\n- 실패 시 대용량 execFileSync output 객체 재던지기 제거 (스텝명+exit code만)\n- 대용량 캡처가 오류 메시지에 포함되지 않는 회귀 테스트 추가\n- packages/triflux 미러 byte-identical 동기",
          "is_bot": false,
          "headline": "fix(release): prepare 테스트 출력을 실시간 스트리밍으로 전환해 실패 로그 절단 제거",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:59:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9b1e82585c123ecb8855ed476ef3a940949ea8d",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.44.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:34:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19362cc05c27b769a54bc00c420c662b2085b47a",
          "body": null,
          "is_bot": false,
          "headline": "docs(changelog): v10.44.0 항목 추가",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:28:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "394afae974b7933cef1bd11166384a207466e679",
          "body": "feat(routing): codex max/ultra 프로파일 레인 (A작업 복구 + 중앙화 정책 포팅)",
          "is_bot": false,
          "headline": "Merge pull request #490 from tellang/feat/codex-max-ultra-routing",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:21:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03b1d5a78a18c8d47d7c07a0437986ebc838bb9d",
          "body": null,
          "is_bot": false,
          "headline": "feat(routing): max/ultra 레인을 agent-route-policy로 포팅",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:12:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77bc3741a871f8dc548362977c567863ead135e6",
          "body": "feat(hub): registration plumbing — scoped role 신원/transport locator 배관 (C6a-3)",
          "is_bot": false,
          "headline": "Merge pull request #489 from tellang/feat/c6a3-registration",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:08:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9f1255a8acf9a89d4e80c7ae6c7f43acb5c4cd7",
          "body": null,
          "is_bot": false,
          "headline": "merge: main 병합 (중앙화 정책 채택)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:04:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da04a2bd3afabfb1c6a240c89c1e07eab3be5a09",
          "body": "…riflux into feat/c6a3-registration",
          "is_bot": false,
          "headline": "Merge branch 'feat/c6a3-registration' of https://github.com/tellang/t…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:01:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78b35c8ad1fe423d8a7d0c9488a00f78d1af2512",
          "body": "… 누락)",
          "is_bot": false,
          "headline": "fix(test): check-mirror 픽스처 CORE_MIRRORS에 router 쌍 추가 (cd6e569e 동반 갱신…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T07:01:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f21dbae993898f506bfe7a483ef270f1ede17a00",
          "body": "fix(swarm): rootDir 통합 제거 — 임시 worktree 통합 + preflight lease-dirty NO-GO (데이터손실 재발 방지)",
          "is_bot": false,
          "headline": "Merge pull request #488 from tellang/feat/swarm-rootdir-integration-fix",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:59:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78f81cd3f1ae5f314c28089530525d5a4723f06b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into feat/c6a3-registration",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:53:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd03b1e482ce1fd9c620fc7136b76f907b16f9fc",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into feat/swarm-rootdir-integration-fix",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:53:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37c5c8604cc85539250c919326fb1a487bf5892c",
          "body": "feat(routing): keyword hook repo_scope/explicit/disabled + 명시토큰 전용 규칙 (A 슬라이스 재구현)",
          "is_bot": false,
          "headline": "Merge pull request #487 from tellang/worktree-keyword-routing-verbs",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:53:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd6e569e66822f204c623b9973d9adeca17405e6",
          "body": "…er 등록 (리뷰 P2)\n\nC6a-3 커밋이 root router만 갱신하고 packages/core/hub/router.mjs를 빠뜨려\npublished @triflux/remote(core router import)가 신원 필드를 조용히 버리는\n드리프트 유발 — 실측: registerAgent ok:true인데 host_id/session_id/locators\n전부 null/[] (ADR-0010 presence 계약 위반). release:check-mirror의\nCORE_FILE_MIRRORS가 router를 미검사하는 사각지대도 함께 봉합.",
          "is_bot": false,
          "headline": "fix(mirror): core router 미러 동기 + check-mirror CORE_FILE_MIRRORS에 rout…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a8cc90925f59358d64879f1982b4cc606d78a7a",
          "body": "…g red 해소)\n\n151baa86부터 main CI red — lane2-d가 tfx-interview description을 D2 소유권\n경계(무수식 일반 요구사항 명확화 = host deep-interview)로 의도적으로 좁혔는데,\n이 테스트가 이관된 옛 무수식 트리거(딥인터뷰/소크라테스/깊이 탐색)를 계속 잠그고\n있었다. 현 표면(deep-interview/tfx-interview/요구사항 분석) + D2 경계 문장을\n회귀 가드로 재잠금.",
          "is_bot": false,
          "headline": "fix(test): deep-interview 트리거 검증을 lane2-d 좁힌 표면에 정렬 (main pre-existin…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:47:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c70f61a02b60aaac0e2354a94265d4ea4ed0678d",
          "body": "…가드 심링크 허용\n\n- P2-1: 전용 명시토큰 규칙 7종에 explicit:true — 'tfx-prune으로 클린업 해줘'가\n  광역 클린업 매처(host-ai-slop-cleaner, 사전순 선행)에 뺏기던 문제를\n  selectPrimaryMatch explicit 우선으로 해결 + 회귀 테스트\n- P2-2: direct-run 가드가 심링크 설치 경로에서 훅을 무력화(argv[1]=심링크 vs\n  import.meta.url=실경로) → realpathSync 재비교 + 심링크 spawn 회귀 테스트\n- biome 포맷 정규화 (json 배열 스타일)\n\n검증: 152 tests 0 fail, release:check-mirror OK, biome clean",
          "is_bot": false,
          "headline": "fix(routing): Codex 리뷰 P2 2건 반영 — 명시토큰 규칙 explicit:true + direct-run …",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:38:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0df73a3048fb22a48ce18e27538d3c4b32ec8984",
          "body": "…시토큰 규칙 (A 슬라이스 재구현, lane2-d 잠금 조정)\n\n소실된 keyword-rules 슬라이스를 생존 테스트(keyword-routing-verbs.test.mjs)를\n명세로 재구현. lane2-d locked prompt matrix(2026-07-17)와의 충돌은 신규 잠금\n우선으로 조정:\n- 광역 동사(리뷰해/분석해/계획/검증/찾아봐 등)는 tfx-unified 유지 (hook은 broad,\n  세분화는 D-트리) — root cause ①의 hook 계층 분리는 접음\n- root cause ③: tfx-ship \n[…]\nresearch/find)은 명시 토큰 전용,\n  priority 1 + supersedes tfx-unified\n- keyword-detector: 테스트 import 시 stdin 행 방지 direct-run 가드\n\n검증: keyword/routing 계열 149 tests 0 fail, release:check-mirror OK, biome clean",
          "is_bot": false,
          "headline": "feat(routing): keyword hook에 repo_scope/explicit/disabled 메커니즘 + 전용 명…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:30:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "77d5e74c2baa626bc6a76e03c297976cb915abda",
          "body": "…-GO (데이터손실 재발 방지)",
          "is_bot": false,
          "headline": "fix(swarm): rootDir 통합 제거 — 임시 worktree 통합 + preflight lease-dirty NO…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:21:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c00e297567e979c5a7572525c213e9f19830b54",
          "body": "…관 (C6a-3)",
          "is_bot": false,
          "headline": "feat(hub): registration plumbing — scoped role 신원/transport locator 배…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T06:19:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "151baa86e0ee79d787021b71e15aeafe8580866c",
          "body": "…nable rationale\n\ngstack-ship 재활성화 기록: 519677a7이 사유 미기록 상태로 disable했던 규칙을 50d5b8bf가 H09 잠금(PR 만들어줘→gstack-ship) 달성에 필수라 재활성화함. 충돌 안전(tfx-ship.supersedes가 배포 케이스 해소). 원 disable 사유가 발견되면 H09 잠금 재검토. 리뷰 D-1/D-3 지적에 따른 사후 기록.",
          "is_bot": false,
          "headline": "fix(lint): balanced-paren Agent call parser + record gstack-ship re-e…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:42:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50d5b8bf8f64a019bb3cf868ff27e5758b627daa",
          "body": null,
          "is_bot": false,
          "headline": "fix(routing): apply locked H03 H06 H09 precedence",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:14:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87853c3e1d1dddccca4559ee25efb6ea5a5f7ccf",
          "body": null,
          "is_bot": false,
          "headline": "feat(harness): sync SSOT-reading Codex adapter",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:13:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e290a83040334992e03f5807db7b822da5b4188",
          "body": null,
          "is_bot": false,
          "headline": "docs(routing): lock host and TFX ownership boundaries",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:07:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a51a1bf45300f9e5c461324ce81f8444c731f5ed",
          "body": null,
          "is_bot": false,
          "headline": "fix(skills): require explicit models for Agent handoffs",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:06:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "409f38bbfc635e8a2d2abd796dfe966065d1710f",
          "body": null,
          "is_bot": false,
          "headline": "refactor(routing): centralize Codex agent policy",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T05:05:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a485b8b6613703bcd3117ff251104094f064967",
          "body": "docs(adr): ADR-0011 accepted 승격",
          "is_bot": false,
          "headline": "Merge pull request #486 from tellang/worktree-adr-0011-accept",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T04:31:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f78f25c39a3ccbaff77d8fe489494523951b4fb",
          "body": null,
          "is_bot": false,
          "headline": "docs(adr): ADR-0011 accepted 승격 (C6a 계약 확정 — C6a-1/C6a-2 랜딩 근거)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T04:25:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bb19eb2a54779ebdbf3fc5d155b9691c578495d",
          "body": "feat(core): register role contract kernel in pack CORE_FILES (C6a-1 follow-up)",
          "is_bot": false,
          "headline": "Merge pull request #485 from tellang/feat/c6a1-pack-core-files",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T04:24:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca12d1993a5b2e2e66c7443e35fcd4e720207e24",
          "body": "feat(hub): schema v6 + store role registry CAS/recovery (C6a-2)",
          "is_bot": false,
          "headline": "Merge pull request #484 from tellang/feat/c6a2-schema-v6-store",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-17T04:24:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d10b291ce0b998886b89b947663d5ce75acd7ea2",
          "body": "…ules 9파일 미포함)",
          "is_bot": false,
          "headline": "wip(codex): max/ultra 라우팅 A작업 로그 복구분 보존 (blob 해시 검증 74M+3D, keyword-r…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T09:03:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77079826e91d2bd2d3ae9c258ba574b1a56808fa",
          "body": null,
          "is_bot": false,
          "headline": "feat(hub): schema v6 + store role registry CAS/recovery (C6a-2)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T08:19:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "023b7b113655ede9ad0d2fd06f9c30fc3b2ee1af",
          "body": "…ollow-up)",
          "is_bot": false,
          "headline": "feat(core): register role contract kernel in pack CORE_FILES (C6a-1 f…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T08:12:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d4d510af41f294130deb0efe34833a5bc41df54",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.43.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T08:02:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ed069a6a6cf3a0f2a292c2150a89486d72fb78c",
          "body": "fix(hub/tfx-live): control-key EAUTH + capture truncation; ADR-0011 active role system (proposed)",
          "is_bot": false,
          "headline": "Merge pull request #483 from tellang/feat/active-role-system",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T08:00:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0aa935c279d03d71316503ed6f5a94cb99fc030",
          "body": "…EACCES\n\nRoot cause c1a15361: TEST_PORT became 0, deriving ports 200/300 which are\nprivileged (<1024) and fail listen EACCES on Ubuntu CI (not an auth/startHub\nregression). Both suites now use port 0, build URLs from the assigned\nhub.port, and use UUID sessionIds. 20x repeat green.",
          "is_bot": false,
          "headline": "fix(test): bind hub-server integration to a dynamic port to avoid CI …",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T07:22:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4381676e230691d96f72db1c34be37cc7973e770",
          "body": "Pure, no-dispatch-change contract kernel per plan-0011a:\n- hub/role-contract.mjs: RoleKey validation/JCS wire, reachability state\n  enum + transition reducer (incl active->elected-probing charter re-issue),\n  v2 snapshot schema + legacy CTO projection.\n- hub/role-control-events.mjs: event allowlist \n[…]\nNAGER/TFX_LEAD_MANAGER), existing exports intact.\nMirrored to packages/core + packages/triflux. No router/schema/hook changes.\npack.mjs CORE_FILES registration deferred (entangled with unrelated WIP).",
          "is_bot": false,
          "headline": "feat(hub): add inert role contract kernel (C6a-1)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T07:22:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7464db6bafc303be919b9cba132a5afff13da68e",
          "body": "10 implementation-gate contracts closing the eng-review REJECT gaps, plus\nthe inert-kernel first slice (C6a-1). Cross-review recorded 3 P1 spec\ncorrections (charter re-issue path, ensureColumn migration seam, legacy\nsnapshot field set). Design gate for ADR-0011 acceptance.",
          "is_bot": false,
          "headline": "docs(plan): add C6a contract spec (Codex draft + Claude cross-review)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T07:01:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c114da71e264a879e9f75cc4955f3544cb5ea24",
          "body": "check-packages-mirror flagged packages/core/hub/team/claude-daemon-control.mjs\nas a byte mirror target (bridge self-import). Sync it to root.",
          "is_bot": false,
          "headline": "fix(hub): mirror control-key fix to packages/core",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:36:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8da5561e010702a316e43e2dec15cd9ede75bca2",
          "body": "…h eng-review\n\nADR-0011 records the CTO + scoped-lead role model (C+A hybrid), resolving\nADR-0010 §5 deferred role scope. plan-0011 carries the phased breakdown and\nthe Codex eng-review that rejects implementation start until the C6a\ncontracts (role_key/kind split, reachability state machine, restart\ndurability, v1->v2 migration, transport-aware failover, authority) are\nnailed. Status stays proposed pending those contracts.",
          "is_bot": false,
          "headline": "docs(adr): add ADR-0011 active role system (proposed) + plan-0011 wit…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:20:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "408df81bd9d21917714c7f7e34d82bf97407ea74",
          "body": "…s auth doesn't EAUTH\n\nOMC runtime config lives at ~/.claude/.omc-launch but the control-key is\nissued at the profile's sourceConfigDir. readDaemonControlKey now prefers\nthe source config dir and falls back to the runtime dir, fixing tfx multi\nheadless EAUTH rejection. fail-open behavior for keyless daemons preserved.\nMirrored to packages/triflux and packages/remote.",
          "is_bot": false,
          "headline": "fix(hub): read daemon control-key from OMC sourceConfigDir so headles…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:14:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48585ecba400a77afe4221d9d0f9729d537a1f84",
          "body": "…ble-assignment\n\nmax(local disk, git ls-tree origin/main) + 1 defends multi-session/swarm\nnumber collisions before they happen.",
          "is_bot": false,
          "headline": "docs(adr): cross-check ADR numbers against origin/main to prevent dou…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:07:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3edbf11a99ec92c59fdcf91c35b7d689efa1aabc",
          "body": "… truncated (CL-1)\n\nCAPTURE_START \"-200\" -> \"-\" captures the complete pane history; the\nMAX_BUFFER 10MiB ceiling still bounds runaway output. Adds a regression\ntest for responses exceeding the old 200-line cutoff. packages/triflux\nmirror kept byte-identical.",
          "is_bot": false,
          "headline": "fix(tfx-live): capture full tmux scrollback so long responses are not…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-16T06:07:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "256f85f398d9c0d7eec6cbff71c19b1bc81f6354",
          "body": null,
          "is_bot": false,
          "headline": "docs(changelog): v10.43.0 항목 추가",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:20:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5e37e21dc98d12c2dab8e657337bd615977e58d",
          "body": null,
          "is_bot": false,
          "headline": "fix(mirror): remote uds-orchestrator import 변환 복원 (cp 클로버 정정)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:20:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d62643ac47080a88bc52977b9368c690965cbcd1",
          "body": null,
          "is_bot": false,
          "headline": "chore(lint): remote uds-orchestrator 미러 재동기 (format 반영)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:17:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d52641a6b8a7784d40b89fd0cd6900db6bed003f",
          "body": null,
          "is_bot": false,
          "headline": "chore(lint): 테스트 파일 format 드리프트 정리",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:16:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bfcd6a6742ec69cd5d15924c792bb9266001724",
          "body": "…Arguments)",
          "is_bot": false,
          "headline": "chore(lint): lifecycle 커밋의 Biome 드리프트 정리 (format/organizeImports + no…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:15:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee9d4b554bbf654c1f96eb846b090d3aa4586416",
          "body": null,
          "is_bot": false,
          "headline": "chore(hud): codex probe 미러 동기 (core/triflux)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:13:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c46b769e18bf2d9dd1cfc419e2d83581e27941a4",
          "body": null,
          "is_bot": false,
          "headline": "feat(hud): codex quota 능동 프로브를 refresh 파이프라인에 통합",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T09:07:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a96171f9265b31c458404b791dc5ef44ea42d171",
          "body": null,
          "is_bot": false,
          "headline": "feat(hud): probe 대상 계정 열거 + JWT 만료 가드 + TTL 스로틀",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:56:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3d7ae1a6e759e6b2ecdba0f46cb1a1073977f1e",
          "body": null,
          "is_bot": false,
          "headline": "feat(hud): app-server stdio 프로브 클라이언트 추가",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:55:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ddeb9988b4e22ed520de78d15676ac5a8b655b5",
          "body": null,
          "is_bot": false,
          "headline": "feat(hud): app-server rate limits 응답 정규화기 추가",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:54:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ab815507b9bf59eef3cc922165df0ddae7d7b59",
          "body": null,
          "is_bot": false,
          "headline": "fix(hud): remove stale quota dimming",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:45:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff9811980a999df1404a091b113f9cf3aaad9418",
          "body": null,
          "is_bot": false,
          "headline": "fix(hud): select weekly quota window independently",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T08:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "341ce1e04b2a9641c3abae9162a1f5c972609e31",
          "body": null,
          "is_bot": false,
          "headline": "fix(hud): separate context planes and select active quota window",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-11T07:02:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13803fbd06a58e2090a51e03f489085a71e62802",
          "body": "control.sock 존재 후 고정 1초만 기다려 브리지 워커 채택 완료 전 요청하던\nrace가 --test-concurrency=8 CPU 경합에서 간헐 실패를 냈다(release.yml prepare\n차단, v10.42.0도 동일 클래스로 2연패).\n\n- 워커가 present && alive가 될 때까지 최대 15초 폴링\n- 제어/attach/종료 상한을 유한하게 확장, attach는 첫 출력 바이트 수신 즉시 완료\n- claude CLI probe 10초 상한 + 미설치/지연 시 명시적 skip\n\n검증: CI 동일 명령(풀스위트 --test-concurrency=8) 2회 + native 인접 37개 5회\n전부 fail 0. 테스트 전용 변경(프로덕션 코드 무변경).",
          "is_bot": false,
          "headline": "test(native-bridge): worker-adoption-probe를 concurrency 부하에서 deflake",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T08:53:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1a153615ef4ae8cafbb95d350dcfee1b20e3efc",
          "body": "워커를 순수 wall-clock으로 죽이던 킬 평면을 활동 기반으로 재배선한다. 활동\n(stdout/stderr/rollout/resultFile 변화)이 지속되면 6h 최후 방어선 전까지\n생존하고, 무활동 20분(TFX_STALL_INTERVENTION_SEC=1200)일 때만 개입 사다리\n(interrupt+재지시 → graceful+resume → SIGTERM → SIGKILL)를 태운다.\n킬스위치 TFX_ACTIVITY_LIFECYCLE=0으로 legacy wall-clock 복원.\n\n- hub/lib/timeout-def\n[…]\nlts/worker-lifecycle/intervention/bridge-intervene/\n  hard-ceiling/timeout-shim) + 활동 연장 계약 갱신\n\n전체 스위트 4543 pass. Codex 교차리뷰 반영(P1 cli-*.mjs 미러갭, P2 SSOT 중복·\nremote register 409, P3 timeoutSec 방어 가드).",
          "is_bot": false,
          "headline": "feat(hub): 활동 기반 워커 lifecycle — wall-clock 킬 제거 + 개입 사다리",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T05:19:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a97defd2e5d6f63420bb310e61b3bce40bbc82fc",
          "body": "세션 스캔이 파일명(시작시각) 기준 first-wins라 이벤트 timestamp 비교 없이\n낡은 스냅샷이 승리하고, expireStaleCodexBuckets 반환값을 두 호출부가\n폐기해 만료 창의 used_percent가 계속 노출됐다. 라이브 대조로 확증\n(캐시 2%/0% vs 실제 최신 이벤트 100%/18%).\n\n- 이벤트 timestamp 기준 최신 스냅샷 선택 + 파일당 800줄 스캔 상한\n- expireStaleCodexBuckets 반환값 실사용 + expired 마커\n- 멀티계정 혼합 시 mixedWindows 마커, 만료 창은 n/a 표시\n- 30분 초과 스냅샷 dim 렌더\n- packages/{triflux,core}/hud 미러 동기\n\nknown-gap: freshness/expiry 영구 회귀 테스트는 후속(임시 fixture로만 검증됨)",
          "is_bot": false,
          "headline": "fix(hud): codex 5h/1w quota가 낡은 스냅샷을 표시하던 결함 수정",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T05:18:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12671e37c585500f1401a7789382cda9ba2544ec",
          "body": "킬 평면을 활동 기반으로 재배선하는 PRD (T1~T6). 관측 평면(heartbeat 등\n활동 감지기 3개)이 wall-clock 킬 타이머를 연장하지 않는 구조 결함이 근거.\n개입 사다리: interrupt+재지시 → graceful 종료+resume → SIGTERM → SIGKILL.\nCodex 리뷰 P1 반영: tfx-route-worker 내부 --timeout-ms 타이머와\ncodex-app-server-worker 자체 SIGTERM을 T1/T3 범위에 포함",
          "is_bot": false,
          "headline": "docs(prd): activity-based-worker-lifecycle — stall 20분 + 개입 사다리",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T02:23:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf420e9ef432a5a540c2318f9b3b838c32f6349a",
          "body": "타임아웃 전수 감사(272 raw → 95 논리 사이트) no-판정 4건 즉시 수정:\n- skills 6곳(review/prune/qa/analysis/plan/research): foreground\n  --timeout 600 dispatch를 run_in_background + 1800으로 전환 — Claude Code\n  하니스가 fg Bash를 600000ms에 강제 종료해 headroom 0이던 사고 벡터.\n  Codex 교차리뷰 P1 반영: dispatch 후 task-notification 배리어 명시\n- tfx-rou\n[…]\nut 900 재시도\"\n  죽은 지침 정정\n- swarm-hypervisor: 미사용 _integrationTimeoutMs 파라미터 제거\n- packages/{triflux,remote} 미러 동기 (remote는 import 보존 Edit)\n\n검증: lint:skills 44 PASS, swarm-hypervisor 테스트 55/55, 미러 diff 일치",
          "is_bot": false,
          "headline": "fix(timeout): 활동 중 워커를 자르는 600s wall-clock 벡터 제거",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T02:23:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "18f1c03924bd36ef4be6dd081d1feaad9d131ed1",
          "body": null,
          "is_bot": false,
          "headline": "chore: regenerate packages for gpt-5.6 routing",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T01:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "006bb11b3d7ed7a159382ef307d381f19d2073d0",
          "body": null,
          "is_bot": false,
          "headline": "feat: route codex lanes through gpt-5.6 profiles",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-10T01:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d44f07142c2aae71f288a5cb3250a9ad8d6f5336",
          "body": "The server sends the attach handshake and FIN back-to-back, so whether\nthe client observes close before writing input (inputSent=false) or\nafter (inputSent=true) is kernel-scheduling luck — observed flaking\ntwice on CI today (PR #477 first run, release run 28844278681), both\ngreen on rerun/local. Dr\n[…]\non; the\nessential contract stays locked: close without a completion marker is\nreported as closed, not misclassified as timeout.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "test(tfx-live): deflake daemon attach socket-close ordering assertion",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:50:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e901e1c957d980b9ce6f10e418f212046e428643",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.42.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:39:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "168d858f5b3a0e0904b8c92033be4e1e13d2b1f4",
          "body": "…-note) (#477)\n\n문서 구조 감사(mnk-callbot 대비)에서 나온 3개 공백을 파일럿으로 메운다:\ndocs/req/(issue #178 raw↔refined 추적성 1건), docs/DECISIONS.md(룰 문서가\n가리키기만 하던 경량 결정로그 실체화), ARCHITECTURE.md의 wiki-harness 각주\n리딩 노트(docs/architecture.reading.md, Obsidian vault 신설, polishing-text\n게이트 통과). 공개 저장소라 신규 docs 하위경로를 .gitignore 화이트리스트에\n명시 추가하고, Obsidian 로컬 UI 세션 상태(workspace.json)는 제외했다.",
          "is_bot": false,
          "headline": "docs: document-harness/wiki-harness 갭 3건 부트스트랩 (req/DECISIONS/reading…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:29:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e30799350e2b8c8326cf092ad3cf5bc22269f568",
          "body": "…hy fix (#475)\n\n* feat(skills): tfx-harness Claude-canonical skill + demoted meta-routing keyword patterns\n\nThe bundled tfx-harness SKILL.md was the Codex-host contract (English,\n$skill syntax, 'Claude execution disallowed') — injected into Claude\nsessions via keyword hooks it contradicts itself and\n[…]\n\na meta-router invoked via keyword rules, not a user-facing surface, so\nit carries internal: true like the bundle original did.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "feat(skills): tfx-harness Claude-canonical + keyword priority hierarc…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:28:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55817b5e2f00b981148ba0f42cb8e31c7eafd5e4",
          "body": "…opy commands (#474)\n\nThe tray Focus button posted to /api/focus-session which cannot reach\ncross-terminal sessions; replace it with a copy button that yields the\nexact attach/resume command per agent CLI (claude --resume, codex\nresume, agy --conversation), quoted for shell safety. Mirrors synced\n(packages/remote + packages/triflux tray.html).\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "fix(tray): replace broken focus button with per-agent attach/resume c…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:28:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a84a80325ff2dc495f9b50d1890480927c677cd",
          "body": "…ce with guardrails (#473)\n\n* fix(tfx-live): follow symlinks in CLI main-module guard\n\nbin/tfx-live.mjs compared fileURLToPath(import.meta.url) against\npathResolve(process.argv[1]) to decide whether to run main(). path.resolve()\ndoes not follow symlinks, but the npm global install always exposes the\n[…]\nrd steal the lock mid-work — refresh on\nan unref'd heartbeat interval (staleMs/3, min 30s) from acquisition to\nrelease instead.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "feat(cto): resident CTO manager precursor (T1/T4/T5) + steward T2 sli…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:28:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ced3bf55ed173b5ba097b137b7e53c90f1ba59b6",
          "body": "2026-07-07 CTO/Hub 감사(23-agent 워크플로우 + 적대적 검증)에서 확인된\n경계 미정의를 결정으로 고정한다: hub=liveness/coordination 평면(presence\nSSOT=store agents 테이블), cto lake=history/authority 평면(durable,\nhub 없이 동작), 의존은 hub→cto 단방향(공용 하위 계층 allowlist 예외),\n소비 표면은 lake/live 형제 키 분리. false-positive 성공 금지를 presence\n계약으로 명문화하고, stale \n[…]\n feat(cto))을 실행 규칙으로 분리한다.\n\ntfx-mirror-policy에 cto/ 미러 행을 추가한다 — remote가 cto/ 8모듈을\nmirror함에도 대상 표에 없어 이번 감사에서 미러 범위 과소산정이 발생했다.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "docs(adr): ADR-0010 CTO lake ↔ Hub role 경계 + 실행 규칙 SSOT (#476)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T05:28:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "532ccc11279cd033ab2297b071b2bf107edfedc4",
          "body": "* fix(hub): verify register presence persistence\n\n* fix(remote): preserve register presence contract\n\n* feat(hub): expose hub identity + store type in register response\n\nSame-store readback cannot detect the #454 failure mode where register\nlands on a different hub instance (or a silent memory fallb\n[…]\n and\nstore_type/db_path in effective so callers can compare against the\nexpected hub/db and detect non-persistent registration.\n\nClaude-Session: https://claude.ai/code/session_016AbhD7od7ZWYYRzshM1Mwn",
          "is_bot": false,
          "headline": "fix(hub): verify register presence persistence (#455)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-07T03:16:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e95d4fcb5764c0d398b59b9285e7fadc04586a1",
          "body": "문서 파운데이션 PR #452(Phase 0-3)에 이어 확정된 횡단 결정 6건을 소급 ADR로 기록(Phase 4).\n\n- 0004 기본 구현 CLI = Codex (tfx-routing)\n- 0005 packages/ 3-layer single-source 미러 (tfx-mirror-policy, #219/#222/#314/#320)\n- 0006 재시도 승격 체인 codex→claude opus 2단계 (tfx-escalation-chain, #356/#363)\n- 0007 hub 기본 포트 27888 고정 (tfx-update\n[…]\nce)\n\n각 accepted + 상태보드 등재(9행) + 대응 .claude/rules/ 역참조 링크(순수 additive).\nPhase 5 자동화는 automation_trigger(ADR>25 또는 drift 2회) 미충족으로 의도적 defer.\nnpm test 4437 pass/0 fail, biome clean, critic 독립 리뷰 ACCEPT.",
          "is_bot": false,
          "headline": "docs(adr): 과거 횡단 결정 backfill (ADR-0004..0009) + Phase 5 게이트 defer (#453)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T08:26:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0a4f60b15d440251877797f087a9d38a6d8749d",
          "body": "흩어진 triflux 문서를 목적별 아키텍처로 정돈하고 docs/adr/ ADR 체계·개발 플로우·공개/비공개 경계를 명시적 SSOT로 확립. Phase 0-3.\n\n- Phase 0: .gitignore 공개경계 교정(allowlist docs/adr·process·_archive) · ADR 부트스트랩(0001/0002 + 상태보드 + CONVENTIONS) · .document-harness.toml · 구조 검증 테스트.\n- Phase 1: docs/README 문서 지도 · CONTRIBUTING · ARCHITECTURE \n[…]\n: psmux 정책 3-way 정합 · CODEX/GEMINI resync · ROADMAP/TODOS stale 배너 · PRD 템플릿 축약.\n\n정본 계획: .triflux/plans/2026-07-01-docs-adr-foundation.md\nCross-model: Claude 작성 → Codex 교차리뷰 APPROVE-WITH-FIXES, 6건 반영.",
          "is_bot": false,
          "headline": "docs: 문서 파운데이션 + ADR 체계 + 개발 플로우 확립 (Phase 0-3) (#452)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T07:35:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9bbab20f1a664d4a320fbb746f5650b902cb9bc6",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.41.1",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T05:33:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da42ea648fc562e34b43041c1fc823aaf4da2ebb",
          "body": "… (#449)\n\nbin/tfx-doctor.mjs and bin/tfx-setup.mjs inject a subcommand into\nprocess.argv and `await import(\"./triflux.mjs\")`, but left\nprocess.argv[1] pointing at the shim's own path. triflux.mjs's\nisMainModule() guard compares process.argv[1] against its own resolved\nmodule path to decide whether t\n[…]\nttern.\n\nRegression tests invoke both shims directly and through a symlink;\nconfirmed failing against the pre-fix shims and passing after (git\nstash before/after). Cross-reviewed by Codex: no findings.",
          "is_bot": false,
          "headline": "fix(bin): tfx-doctor/tfx-setup shims silently no-op via installed CLI…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T05:26:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d6955a092e713cca18d5a5ce982246111ce8a54",
          "body": "bin/tfx-live.mjs compared fileURLToPath(import.meta.url) against\npathResolve(process.argv[1]) to decide whether to run main(). path.resolve()\ndoes not follow symlinks, but the npm global install always exposes the CLI\nas a symlink (tfx-live -> .../triflux/bin/tfx-live.mjs), so every real\ninvocation \n[…]\nich is why `tfx`/`triflux` were unaffected), mirror it to\npackages/triflux/bin/tfx-live.mjs, and add a regression test that invokes the\nCLI through a real symlink so this can't silently regress again.",
          "is_bot": false,
          "headline": "fix(tfx-live): follow symlinks in CLI main-module guard (#448)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-07-01T05:25:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15635c117ef5ff24db7d5bb4f1e59a3bc8e8929f",
          "body": "…iance) (#445)",
          "is_bot": false,
          "headline": "test(hub): lock CTO sweeper live-leader no-op (epoch + transfer invar…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-30T08:43:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa82f7aae3512f1f409cc926ee408ab5ca598746",
          "body": "…adiness poll (#446)",
          "is_bot": false,
          "headline": "fix(release): tag-only push with stale-HEAD preflight + remote-tag re…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-30T08:38:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "940973a60788c3a81b7c82bcc5385d9b84c68146",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.41.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-29T07:57:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "099f216226cd215f13c9592ce4c687bee97d1ebf",
          "body": "…) (#444)\n\n- add reelectStaleRoles method for stale role succession\n- wire staleTimer to re-elect after stale agent sweep\n- cover deterministic heir tiebreak, backlog handoff, and sweep-driven chain failover\n- mirror router changes to core and triflux packages",
          "is_bot": false,
          "headline": "fix(hub): sweeper actively re-elects stale role leaders (CTO failover…",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-29T07:52:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5163d5f76f2aada68ce2d26bbd4cbc03aaef18b3",
          "body": "* feat(route): claude --model/--effort ladder; drop dead ultracode effort branch\n\n- Wire Claude native --model/--effort through route metadata, worker args, and mirrored package files.\n- Drop dead ultracode effort mapping and cover CLI argv passthrough with an integration assertion test.\n\n* fix(rout\n[…]\nunknown effort routes\n\n- append claude --effort only when a non-empty effort is resolved\n\n- add worker-boundary omit test for missing claude effort\n\n- mirror tfx-route.sh changes into packages/triflux",
          "is_bot": false,
          "headline": "feat(route): claude --model/--effort ladder (Claude lane) (#443)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-29T07:52:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3b1a6740a14040fe06f687f6bffa57c72d77d58",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v10.40.0",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-26T08:05:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c13a8246cb0942eec4cfd0d6789b8c8941a0948",
          "body": "Elect a single live leader for the `topic:cto` role and fail over to a\nstandby heir when the leader goes offline, so an offline CTO no longer\nstalls live cross-session coordination (#441).\n\n- hub/router.mjs: role candidate tracking, lease-based liveness, single\n  leader election (chooseRoleLeader/en\n[…]\ntray-state, cto-status,\n  conductor-registry (succession election, takeover, backlog transfer).\n\nMirrored byte-identical to packages/{core,remote,triflux}; remote keeps\nits @triflux/core import paths.",
          "is_bot": false,
          "headline": "feat(cto): role-based succession/failover for CTO coordinator (#442)",
          "author_name": "tellang",
          "author_login": "tellang",
          "committed_at": "2026-06-26T07:58:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 1445,
      "latest_release_at": "2026-07-17T07:35:07Z",
      "latest_release_tag": "v10.44.0",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 18,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 3.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "triflux",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "claude-code",
            "plugin",
            "codex",
            "antigravity",
            "cli-routing",
            "orchestration",
            "multi-model",
            "triflux",
            "tfx"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/triflux",
          "is_deprecated": false,
          "latest_version": "10.44.0",
          "repository_url": "https://github.com/tellang/triflux",
          "versions_count": 294,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3571,
          "first_published_at": "2026-03-05T07:36:01.682000Z",
          "latest_published_at": "2026-07-17T07:35:06.254000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 2,
      "stars": 7,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-04-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 2,
        "total_forks": 2
      },
      "star_history": {
        "days": [
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 1
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-11",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 7,
        "total_stars": 7
      },
      "open_issues_and_prs": 29
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "jsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 253000,
      "source_files_sampled": 1586,
      "oversized_source_files": 26,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md",
        "GEMINI.md",
        "packages/triflux/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 11674
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "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": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@iarna/toml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.5"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "better-sqlite3",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.10.0"
        },
        {
          "name": "pino",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.3.1"
        },
        {
          "name": "pino-pretty",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^13.1.3"
        },
        {
          "name": "systray2",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.4"
        },
        {
          "name": "tree-kill",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.2"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 277,
        "open_issues": 27,
        "closed_ratio": 0.866,
        "closed_issues": 175,
        "closed_unmerged_prs": 13
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "tellang",
          "commits": 1441,
          "avatar_url": "https://avatars.githubusercontent.com/u/37146362?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "npm-publish.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "4 out of 4 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/22 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "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": 0,
            "reason": "30 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f1a981bf5e99bd546e7e0d4524d30062135230d2",
        "ran_at": "2026-07-22T02:58:57Z",
        "aggregate_score": 3.8,
        "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-20T09:32:27Z",
      "oldest_open_prs": [
        {
          "number": 493,
          "created_at": "2026-07-17T12:54:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 494,
          "created_at": "2026-07-17T13:04:03Z",
          "last_comment_at": "2026-07-17T16:57:42Z",
          "last_comment_author": "tellang"
        }
      ],
      "last_merged_pr_at": "2026-07-17T08:12:17Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 437,
          "created_at": "2026-06-18T06:58:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 447,
          "created_at": "2026-06-30T08:31:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 450,
          "created_at": "2026-07-01T05:35:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 451,
          "created_at": "2026-07-01T05:36:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 454,
          "created_at": "2026-07-07T00:47:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 456,
          "created_at": "2026-07-07T03:11:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 457,
          "created_at": "2026-07-07T03:11:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 458,
          "created_at": "2026-07-07T03:11:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 459,
          "created_at": "2026-07-07T03:11:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 460,
          "created_at": "2026-07-07T03:11:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 461,
          "created_at": "2026-07-07T03:11:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 462,
          "created_at": "2026-07-07T03:11:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 463,
          "created_at": "2026-07-07T03:11:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 464,
          "created_at": "2026-07-07T03:11:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 465,
          "created_at": "2026-07-07T03:11:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 466,
          "created_at": "2026-07-07T03:11:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 467,
          "created_at": "2026-07-07T03:11:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 468,
          "created_at": "2026-07-07T03:11:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 469,
          "created_at": "2026-07-07T03:11:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 470,
          "created_at": "2026-07-07T03:11:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/tellang/triflux",
    "host": "github.com",
    "name": "triflux",
    "owner": "tellang"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 64,
      "inputs": {
        "security": 38,
        "vitality": 86,
        "community": 47,
        "governance": 56,
        "engineering": 86
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 1445,
              "human_commit_share": 1,
              "days_since_last_push": 1,
              "active_weeks_last_year": 18
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "18/52 weeks with commits",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1445 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1445
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v10.44.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 3.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 47,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "forks": 2,
              "stars": 7,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "7 stars",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "2 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "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": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 59,
            "inputs": {
              "packages": [
                "triflux"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3571
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,571 downloads/month across npm",
                "points": 47.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3571,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "merged_prs": 277,
              "open_issues": 27,
              "closed_issues": 175,
              "issue_closed_ratio": 0.866,
              "closed_unmerged_prs": 13
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "87% of issues closed",
                "points": 40.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 87
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "277/290 decided PRs merged",
                "points": 36.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 277,
                      "decided": 290
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "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": 53,
            "inputs": {
              "followers": 23,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "tellang",
              "public_repos": 26,
              "account_age_days": 3058
            },
            "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": "23 followers of tellang",
                "points": 9.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 23,
                      "login": "tellang"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "26 public repos, account ~8 yr old",
                "points": 22.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 26
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "triflux"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "294 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 294
                    }
                  }
                ],
                "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": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "ai-routing",
                "claude-code",
                "claude-plugin",
                "cli-orchestrator",
                "codex-cli",
                "developer-tools",
                "gemini-cli",
                "multi-model",
                "task-automation",
                "terminal"
              ],
              "has_wiki": false,
              "homepage": "https://www.npmjs.com/package/triflux",
              "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": "https://www.npmjs.com/package/triflux",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 38,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 38,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "4 out of 4 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/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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 2",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "30 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "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": 63,
        "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.96,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md",
                "GEMINI.md",
                "packages/triflux/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 11674
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md, GEMINI.md, packages/triflux/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": "96 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 96,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "jsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "jsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "jsconfig.json"
                    }
                  }
                ],
                "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": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 253000,
              "source_files_sampled": 1586,
              "oversized_source_files": 26
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript with type-check config (jsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "jsconfig.json",
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "26/1586 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1586,
                      "oversized": 26
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "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": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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 npm:triflux@10.44.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T02:59:08.817582Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/tellang/triflux.svg",
  "full_name": "tellang/triflux",
  "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 agregadasnpm.