Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-25 18:50 UTC

DAXZEIT / pipeline-moe

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

DAXZEIT/pipeline-moe tiene un índice de salud de 39 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es AI Readiness (59/100) y la más baja, Sustainability & Governance (30/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

39
global / 100
En riesgo

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

39
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

DAXCuenta personal
0 seguidores1 repositorio públicodesde sept 2022

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
npmpipeline-moe0.1.25438519hace 5 díasmulti-agentorchestrationllmlocal-llmllama-serveragentstuisse

Métricas por categoría

Vitalidad

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

35En riesgo · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
4.2/36Cadencia de commits — 6/52 semanas con commits
18/18Volumen de commits — 244 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year244
human_commit_share1
days_since_last_push0
active_weeks_last_year6
Cómo se puntúa
0/27Publica versiones — sin versiones publicadas
0/36Recencia de las versiones — sin versiones
0/27Cadencia de publicación — sin versiones
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count0
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?

33En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
48.6/80Descargas mensuales — 4385 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagespipeline-moe
dependents
ecosystemsnpm
total_downloads
monthly_downloads4385
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?

30En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de DAXZEIT
9.9/25Trayectoria — 1 repos públicos, cuenta de ~3 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginDAXZEIT
public_repos1
account_age_days1409
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 5 días
20/20Historial de versiones — 19 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagespipeline-moe
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

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

58Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

55Moderado
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
0/10Wiki
Datos de entrada utilizados
topics
has_wikino
homepage
has_readme
has_docs_dir
has_descriptionno

Seguridad

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

40En 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
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
2/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
0/5SAST — no SAST tool detected
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.8/7.5Vulnerabilities — 9 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate2,5
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, packaging, signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages239
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de npm:pipeline-moe@0.1.25 —lo que arrastra la instalación del paquete publicado—: 239 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

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

59Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — packages/client-core/tsconfig.json, packages/tui/tsconfig.json, tsconfig.json, web/tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 92 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
4/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configspackages/client-core/tsconfig.json, packages/tui/tsconfig.json, tsconfig.json, web/tsconfig.json
agent_commit_share0,92
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.5/55Tamaños de archivo manejables — 2/216 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes139.587
source_files_sampled216
oversized_source_files2

Datos clave

0estrellas de GitHub
1contribuidores
244commits en los últimos 12 meses
0días desde el último push
0versiones publicadas
1factor bus
0issues 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

Más detalle

OpenSSF Scorecard 2.5 / 10
2.5agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/dPackagingpackaging workflow not detected
4Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 4
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
1Vulnerabilities9 existing vulnerabilities detected
Dependencias directas 12
RegistroPaqueteRestricción de versiónManifiesto
npm@earendil-works/pi-agent-core0.80.6package.json
npm@earendil-works/pi-ai0.80.6package.json
npm@earendil-works/pi-coding-agent0.80.6package.json
npm@earendil-works/pi-tui0.80.6package.json
npmcors^2.8.5package.json
npmexpress^4.19.2package.json
npmexpress-rate-limit^8.5.2package.json
npmtsx^4.19.0package.json
npmtypebox^1.2.16package.json
npmyoutube-transcript-plus^2.0.0package.json
npmreact^18.3.1web/package.json
npmreact-dom^18.3.1web/package.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

Avisos de dependencias 0

Instalar npm:pipeline-moe@0.1.25 arrastra 239 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 2154,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "CSS": 51219,
        "HTML": 319,
        "Shell": 5629,
        "JavaScript": 5142,
        "TypeScript": 1806139
      },
      "pushed_at": "2026-07-25T13:58:56Z",
      "created_at": "2026-06-17T02:34:26Z",
      "owner_type": "User",
      "updated_at": "2026-07-25T13:59:05Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://daxzeit.eu",
      "name": "DAX",
      "type": "User",
      "login": "DAXZEIT",
      "company": null,
      "location": "http://localhost:5310/",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/113620658?v=4",
      "created_at": "2022-09-15T15:19:42Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 1409
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "724398178290880aa7ee8b77ae59cfb89dae5b1f",
          "body": "…ld both in CI\n\nBoth were left on the operator's desk as semver-visible calls. Dax's answer\n(2026-07-25): the project is pre-beta with zero real users — nothing is\npromoted anywhere, npm counts are registry bots — so narrowing `engines` and\ntrimming `files` costs nothing today, and the window closes\n[…]\npresent;\n1386/1386; tui typecheck exit 0.\n\nNot bumped: version stays 0.1.40 — these reach npm through the normal release\nritual, not this commit.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(tui): align engines on pi's floor, stop shipping tests — and ho…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-25T13:58:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8f5b799b6ac5034ea26e78a0073fe46eff5744df",
          "body": "…uires 22.19\n\nSecond CI run (30159523318) surfaced an EBADENGINE nobody had ever seen: all\nfour @earendil-works/pi-* packages declare `node: >=22.19.0`, while\npipeline-moe promised `>=20.12`. pi is the foundation of this project, so that\npromise could never hold — a user on node 20 or 21 installs cl\n[…]\ner-visible call that belongs to the operator. It is however now UNTESTED:\nthe tui's own suite runs through the root workspace, which needs 22.19.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(engines): node >=22.19.0 — the declared floor was fiction, pi req…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-25T13:23:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "22701faf2a9c1e6c831fb6bedf6cfd20a5dff760",
          "body": "… tests assert on a gitignored dir\n\nRun 30159393336 went red on two things, both the exact class the gate exists to\ncatch — \"works in Dax's tree\" — and neither reachable by the tester, which runs\nin that tree.\n\n1. web/ imports @pipeline-moe/client-core in api.ts, types.ts, handoffs.ts and\n   useRoom\n[…]\n tree 9/9, full suite 1386/1386;\na throwaway `git clone` of HEAD (no agent_memory, exactly what the runner sees)\n5 passed | 4 skipped | 0 failed.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix what the first run found — web needs the root install, memory…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-25T13:19:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3f2b3d234b142ef87b294c2c4eabdbbb34c03d7f",
          "body": "…s, pi lockstep\n\n\"Tests green before release\" was a norm carried in an agent's context, which is\nthe exact shape handoff-gates.ts refuses for review: prose is routable. The\n2026-07-18 incident (blocks narrated done with a fabricated test transcript) is\nthe proof. This runs on a clean checkout, outsi\n[…]\nted, not enforced: packages/tui `files: [\"src\"]` has no test exclusion, so\n17 test files ship to npm users. Packaging call, left to the operator.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: the release gate becomes an invariant — typecheck, tests, tarball…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-25T13:15:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "94cb63eef1c93fcb3bc71b4e33232f3d96196b1d",
          "body": "When a fused pair drops to ONE hat (soloing/detaching the other), reseat()\nclears only the departing hat's persona.seat; the survivor keeps a\npersona.seat still naming the seat, even though a 1-hat seat is a singleton\n(fused() === false). personaStates() — which is what gets SAVED and seeds the\ndrif\n[…]\nntext by design; the later\n\"nothing to compact\" is that symptom, not compact's doing.\n\nRegression test added; full suite 1386 green, tsc clean.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(seats): personaStates derives seat from fused(), not the stale field",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-22T00:48:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "da35fc83882924d23e9267da438430d3cd8c9f74",
          "body": "The draft model counted only \\n-delimited logical lines, so a long line\nwith no newline rendered as one row with wrap=\"truncate-end\" — Ink clipped\nit with an ellipsis and the cursor scrolled off-screen. Now the box grows.\n\nNew `wrapDraft(value, cursor, width)` pre-wraps the draft into VISUAL rows\n(d\n[…]\ned in a real TTY: box grows, no …, caps at 6 rows with ⋮, transcript\nshrinks, zero corruption. 6 new wrapDraft tests; full TUI suite 181 green.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tui): input soft-wraps long lines instead of clipping with …",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-22T00:48:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eafb55baff6ef5135c053b65327adf2ac0b24656",
          "body": "…u actions\n\nThe web could already fuse/detach seats by typing /seats in the composer\n(handleSlashCommand → registry.reseat), but the affordance was missing:\n/seats wasn't in the composer command list and the roster ⋯ menu had no\nseat actions. Path A — one backend door shared by TUI and web, no REST.\n[…]\n — fixes\n  the left-edge overflow when a fused-seat item carried a long mismatch hint.\n\nBoth clients still funnel through the single handleSlashCommand door; no\nsrc/ backend changes. 1379 tests green.",
          "is_bot": false,
          "headline": "feat(web): seat controls from the WebUI — /seats discoverable + ⋯ men…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-21T23:24:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0084cee3bb7f66c56f15504fc175e307ce950503",
          "body": "…stack\n\nSurface who passed the turn to whom, derived purely from the live transcript in\n@pipeline-moe/client-core (deriveHandoffGraph + deriveHandoffChain): edges typed\nhandoff / route / hat-switch from Message.handoffTo + RosterItem.seat (a hop\nbetween two hats of one fused seat). Web (0.1.1) gains\n[…]\nminal matrix\nwas tried and dropped: emoji column widths never align.\n\nVersions: pipeline-moe 0.1.26, client-core 0.1.14, tui 0.1.40, web 0.1.1.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(graph): handoff graph — web Handoffs tab + TUI /graph; bump the …",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-21T19:40:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "99a1e99f0e3aac2605f0091bf30a95a6b69af2e0",
          "body": "…e pi stack\n\nclient-core 0.1.13 ships preloadRoomState + initialState hydration; tui\n0.1.39 (dep tightened to ^0.1.13 — cli.tsx imports preloadRoomState, a\n0.1.12 resolution would crash) ships /close, solo-mode room form with\n/model-style pickers, prompt history, paste markers, multiline input and\nh\n[…]\nx cache: server boots, API answers, web UI 200.\nThe 0.80.10 migration is a ROADMAP chantier (grill first — it touches\nthe hardened OAuth flows).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: pipeline-moe 0.1.25, client-core 0.1.13, tui 0.1.39 — pin th…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T20:01:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "54850c96faf3feede4e59656e3a6fa1c290a68d6",
          "body": "A room switch swapped to a store born at initialRoomState, so the frame\ncollapsed to near-blank (roster strip gone, transcript empty — 6 non-blank\nlines out of 42, measured on a script(1) byte recording) until the REST\nsnapshot repopulated it piece by piece.\n\nclient-core: createRoomStore accepts `in\n[…]\ntiline draft\nrenders in ONE frame (transcript shrink + input grow together), so the\nsetDraft commit ordering is a safety net, not a visible fix.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tui): hydrate-then-swap room switches — no more empty-room flash",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T19:36:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fe7b5adef8ecb4cd59b0c889865364a4d49b01c9",
          "body": "…style arrows\n\nThe command line's draft is genuinely multiline now (multiline-input.ts):\nAlt+⏎ (or a trailing \"\\\" + ⏎ where the terminal swallows the chord)\ninserts a newline; ↑/↓ move the cursor between lines and only fall\nthrough to prompt history at the draft's edges — pi's Editor arbitration;\nCt\n[…]\nes all lines with real newlines, history recalls multiline\ndrafts, paste markers and palette unaffected, screen intact after\ngrow/shrink cycles.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): multiline input — Alt+⏎ / \\⏎ newlines, windowed draft, pi-…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T19:17:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3946f17854bfcba817336434e1aa9e78279f648c",
          "body": "Two of the pi-tui lessons (docs/tui-lessons-from-pi.md), scoped to the\nsingle-line input we have today:\n\nPrompt history (prompt-history.ts): ↑/↓ recall past submissions while a\ndraft exists — the draft parks on entry and restores when ↓ walks past\nthe newest entry, with a dim ⟲ n/m indicator. An EMP\n[…]\nmentions past the mrff3qwe guard; backspace/delete eat a\nmarker atomically. Verified live end-to-end: the room receives the full\nmultiline text.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): prompt history + large-paste markers (pi-tui quick wins)",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T18:54:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "37a5ed0ac078ffa13ddf9edfac5f858e41ec7bfd",
          "body": "…ry surface\n\nRoom-side: /add dispatches into the /model handler (usage/error strings\nfollow the typed head). TUI: Command grows an `aliases` field — lookup and\nthe palette match on aliases, the palette shows \"/add (model)\" style\nlabels, /help hints list them. Web composer: /add entry added by hand;\n\n[…]\nDMAP notes the duplication (derive SLASH_COMMANDS from one source if a\nsecond alias ever appears).\n\nCommitted from the 2026-07-13 shakedown WIP.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(commands): /add as an alias of /model, aliases wired through eve…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T18:42:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5eb50ffb4e64ab2f1115baf43fc45fec810635b3",
          "body": "…e clobbered file\n\ncreateDefaultRoom() → createRoom(\"default\") fires `void saveManifest()`,\nwhich rewrites the manifest with only the live rooms (default alone) —\nclobbering the persisted multi-room manifest before restoreRooms() read\nit. Every reboot raked the room list back to default (tester repr\n[…]\nRoom and hands the snapshot to restoreRooms(); the re-read\nfallback stays for callers without one.\n\nCommitted from the 2026-07-13 shakedown WIP.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(rooms): restoreRooms reads the pre-boot manifest snapshot, not th…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T18:42:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "275c951dd22513be8b3989d0addb91553318733e",
          "body": "Source study of @earendil-works/pi-tui 0.80.10: differential line renderer\ngrowing into native scrollback vs our fixed-height Ink frame, their\neditor-grade input vs our single-line CommandLine, overlays/images/themes.\nRanked backlog: scrollback architecture (grill first), prompt history +\nmultiline, paste markers, kitty images, keybinding registry.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(tui): lessons from pi-tui — comparison + ranked backlog",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T18:39:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c0234d209058f17d27f448b8088194e0ea48aec",
          "body": "config.ts defaults workspaceDir to process.cwd(), so room tests\nreceipt-snapshotted the entire repo around every simulated turn. Untracked\njunk in the checkout (a 69M site/, workspace experiments) quadrupled that\nwalk (11.5ms/253 files → 46ms/1093) and blew the room tests' timing\nbudgets under full-\n[…]\nd in isolation. Point WORKSPACE_DIR at a throwaway\ntmpdir in the vitest config so the suite no longer depends on what the\nrepo has lying around.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): hermetic workspace — stop receipt-snapshotting the checkout",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T18:01:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "09348e166f439f42844313adf362c6c3a79e0563",
          "body": "Same move as the Model row: Enter swaps the form for the windowed,\ntype-to-filter SelectOverlay — default roster and solo as sentinel rows,\nthen the saved presets with their persona-summary hints, ● on the current\nchoice. Ids are indices into the cycle's label list, so sentinels and\npreset names can never collide.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): ⏎ on the room form's Preset row opens a roster picker",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T17:46:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cbeec6da09b73fdbefacc3aa24423d14a22331d6",
          "body": "←→ cycling doesn't scale to a 30+ model catalog. Enter now swaps the form\nfor the same windowed, type-to-filter SelectOverlay /model uses (● marks\nthe current choice); the form and its state stay mounted underneath, so\nchoosing — or Esc — drops straight back with everything intact.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): ⏎ on the room form's Model row opens the /model-style picker",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T17:31:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d08efe6d4bb9a8c6c4d89d34fc2d0b606ad4b835",
          "body": "The roster cycle in the create-room wizard grows a \"— solo: pure pi —\"\nslot between the default roster and the saved presets. Picking it swaps\nthe preset preview for a Model row (←→ over the server catalog, /solo's\nform twin) and makes Name optional — the server auto-derives\n\"solo/<model>\", and the \n[…]\nd\nname so the auto-name shows.\n\nRows are a computed list instead of fixed indices, so the Model row\nappears and disappears under a stable focus.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): solo mode in the + room form",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T17:23:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bdfbbf065b27afdee0e443d905ea9a0d9e276ebc",
          "body": "The web tab bar's ✕ finally has a TUI twin: /close destroys the live room\n(transcript + roster stay on disk, /rooms resumes it) and falls back to\nthe default room. The default room itself refuses — it's the planner's own.\n\nNew CommandContext.notifyAfterSwitch rides App's existing pendingNotice\nmachi\n[…]\nnly survives\nwhen the switch happens first). /rooms, /newroom, /solo and /fork now use\nit too, so their post-switch confirmations actually show.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): /close — shut the foreground room, land in default",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-19T17:03:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "69aac85b5ce51d53491e59b18e53d63fd7fc7e88",
          "body": "…at runs on pi's stock prompt\n\nThe resource loader's discovery served ~/.pi/agent/SYSTEM.md as the BASE\nprompt of EVERY seat: team roles carried the operator's personal pi\nidentity underneath their persona overlays, and a cloud solo was told it\nis a local agent on this machine's GPU (Fable-in-solo r\n[…]\n399 — solo GRM: \"Je suis pi — le modèle dense de dax,\ncoincé dans une RTX 3090\"; team scout: persona identity only, stock base\nasserted by test.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(seats): the operator's SYSTEM.md is pure-pi-only — every other se…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-18T23:23:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7f5c8ae625e8a7991dbb433d54bd01394f70b37a",
          "body": "… squeezing its model name\n\nThe model/gauge under-rows truncate to their CELL's width, sized by the\ntop row's \"○ π pi\". Right for a crowded roster; starving for a small one —\na solo room rendered \"Fable…\" and \"0/100…\" with the whole strip blank to\nthe right (dax repro, 2026-07-19).\n\nstripCells now g\n[…]\n\npaint so a running cell's inverse highlight never smears over granted\nblanks; gutters stay aligned across rows — asserted by the updated tests.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tui): strip under-rows spread into free width — a solo room stops…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-18T23:09:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce4f488f028e164791c9f5680ac633dd2dbce70d",
          "body": "Not every task needs a team. /solo opens a one-persona room running an\nUNMODIFIED pi: the persona (personas.soloPersona) carries an empty\nsystemPrompt and full hands (read/write/edit/bash + web), so the seat's\nprompt is exactly ~/.pi/agent/SYSTEM.md + skills + the workspace note —\nthe lone-agent aut\n[…]\n room keeps the pipeline's infrastructure around the agent: workspace\nconfinement, transcript + token gauge, task board, ask_user, agent_memory.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solo): /solo — a bare pi room beside the pipeline",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-18T21:26:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5b2336337c9c60e75514e95adca834ad839b06b0",
          "body": "A room whose roster holds ONE active agent was still told it lives in a\nshared multi-agent chat room, shown a one-line YOUR TEAM block, and (the\npre-existing gate in custom-tools) silently denied the handoff tool the\nprompt kept promising. Prompt and toolset now build from the same\npredicate: a lone\n[…]\never route until an unrelated rebuild.\n\nEmpty persona systemPrompts no longer inject an empty prompt part\n(groundwork for /solo's bare persona).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(seats): a lone room sheds the team scaffolding it cannot act on",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-18T21:25:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "77c7b98b676f9f69abaf09b6ee289b2cfb673c55",
          "body": "Two features, both live-verified on :5399, plus the gauge redefinition.\n\n#11 Preset drift (\"line-up != preset\"):\n- Room records provenance (sourcePreset); diffs live roster vs preset doc\n  normalized both sides via stripSeedFields (the anti-false-positive invariant).\n- Discreet `*` badge (TUI Status\n[…]\nute (ctx:40K); the percent awaits room-level compaction.\n\n1325 tests green (one unrelated local-model-lock timing flake under full-suite\nparallel load, tracked in ROADMAP debt). tsc + web build clean.",
          "is_bot": false,
          "headline": "feat(room): preset drift detection + room transcript token gauge",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-13T02:32:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9c6686f284e76570915afba95ae56f9fbb23ec5a",
          "body": "…t, not delegation\n\nA fused hat that handed off to another hat of its own seat narrated it as a\ndelegation to a separate agent (theatre — the context is already its own) and\nran it through the supervisor (an inter-brain decision with no object here).\n\nTwo halves (\"prompt + auto accept\", dax's call):\n[…]\n.test.ts (MockRegistry.seatOf; intra-seat\nauto-accepts without runner + trace, inter-seat stays supervised) → 31/31.\nRoot 1298 + TUI 153 green.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(seats): intra-seat handoff is a self-switch — prompt + auto-accep…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T17:03:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "763d7dd475e31fcd89de39dec1106289e87100c6",
          "body": "Live report (Dax): a long user-chosen seat name (\"planner-scribe-seat\")\nate the whole group width on BOTH under-rows — \"⌐planner-scribe-seat:…\"\ntwice, model and usage truncated away. The seat identity is already\ntold by the fused gutter grouping; the under-rows now carry a bare ⌐\nmarker plus the pay\n[…]\n⌐ 0/1000K\"). Side bonus: the\nspanning entry has the whole group width, so the model name often fits\nuntruncated where single cells ellipsize it.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tui): seat under-rows show model + gauge, not the seat name",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T16:11:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "00ed492cd21ba647e49afecc9375aa02b479cf8c",
          "body": "…Seat in client-core)\n\nLive report (Dax): planner+scribe fused server-side (notice confirmed)\nbut the strip showed them as separate wall-separated cells — the strip\ngroups by ADJACENCY, and the hats sat at slots 0 and 5. Sources of\nscattered order that display-side code must survive: rosters persist\n[…]\nre building their runs, so the ⌐seat group + single\nspanning gauge render no matter what order the wire delivers.\n\n1295/1295 root + 153/153 TUI.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ui): fused seats group visually regardless of wire order (groupBy…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T16:06:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "50049598b3e88c350e10bd7240492fa36d1dcafe",
          "body": "…ther in the roster order\n\nBare /seats now opens a two-level SelectOverlay chain à la the Ctrl+R\nroster menu (Dax's ask): level 1 is the seat map (fused clusters first\nwith the ⌐seat prefix and \"shares context with @x\" hints, then\nown-context members); level 2 offers the picked agent's moves — join \n[…]\nnFile into maker/ and the strip\nshows one contiguous \"Builder ┈ Tester\" group with a single spanning\n⌐maker gauge. 1295/1295 root + 152/152 TUI.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): /seats opens an interactive seat menu; fused hats sit toge…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T15:38:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "31a4f931ceddcb4c954166e9caa1485ffd8a2156",
          "body": "…set activation surfaces\n\nDax: \"give multiple roles to a single agent\" from the TUI. Two surfaces:\n\n- /seats (server-side, room.ts — works from TUI and web): no args = the\n  seat map; `fuse <seat> @a @b…` = those hats share one context;\n  `solo @a…` = detach. Backed by Registry.reseat: fusing onto a\n[…]\n, solo\n(\"detached to its own context (previous session orphaned on disk)\" —\nfresh session, orphan kept beside it). 1287/1287 root + 146/146 TUI.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(seats): /seats command + composer seat field — live-room and pre…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T15:20:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6e5256fe15643e3a54ff1e00d51750aaea8254fd",
          "body": "…tted\n\nPost-restart on the 27B: T2 bench twice at 93% (baseline 91% ±2.5) —\nrouting decisions unaffected by the seat layer. Live A/B same goal same\nmodel: seats-ON 2 sessions / tester prompt 322 chars vs seats-OFF 3\nsessions / 525 chars, goal MET both sides. Wall-clock 45s vs 50s is\nwithin noise — a\n[…]\nwin;\nthe minutes-scale magnitudes come from long, state-heavy discussions.\nseat-arena-defused.json committed as the OFF side of the A/B harness.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(seats): 27B re-verification — T2 ×2 = 93%/93%, A/B harness commi…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T14:47:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "088e4ca34c2cf13b83bdd297710d77c211bcd308",
          "body": "… + seat-arena preset\n\nseat-arena room (maker = builder+tester, singleton planner): 2 session\ndirs for 3 personas, builder write + tester turn in the SAME jsonl, per-\nturn hat headers correct, goal_verdict MET. Tester turn = 322-char\nprompt, 1 tool call, 182 reasoning chars vs the discussion-57 base\n[…]\n) is\nnot comparable to the 91% 27B baseline and not a regression signal.\npresets/seat-arena.json committed as the live-verify harness for seats.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(seats): phase 1 live-verified on :5399 — re-derivation tax datum…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T14:30:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2d1b7fa869f0a6f0d1a61ea3a51f9955a8b9dcc7",
          "body": "Design: docs/fused-seats.md; the 9 open branches were decided in the\n2026-07-12 grilling (ROADMAP « Décisions actées »). The persona becomes a\nHAT (role prompt + tool allowlist, applied per turn); the context becomes\na SEAT (one pi session shared by a cluster of hats). Opt-in via\n`seat?: string` on \n[…]\n.\n\n1280/1280 root + 144/144 TUI. Live verification (:5399 re-derivation tax,\nT2 ×2, prefill timing) is the next step before this ships anywhere.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(seats): fused seats phase 1 — role hats on shared contexts",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T14:21:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cd3f4ed467d0827016197a5218c09ccfb4d1d446",
          "body": "Grilling session 2026-07-12 over docs/fused-seats.md open branches.\nEight decisions captured in ROADMAP « Décisions actées » (config surface,\nswitch semantics, hat header, compaction, memory, roster/UI, lifecycle,\ntraces, checkpoint×seats + one-seat-one-modelRef invariant) and a\nglossary section add\n[…]\nhe design doc. Two chantiers spawned and\ndeliberately decoupled: backlog #11 (preset drift pull/push) and\n#12 (room compact + room token gauge).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(fused-seats): phase 1 grilling — 9 branches decided, glossary fixed",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T13:44:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dadacaf0913b76d8ac14225a5d51d8d5ac8be240",
          "body": "…9B relay hardening)\n\nThe eval loop no longer depends solely on the GOAL_MET magic token.\nObserved live (9B chaos-v2, room-mrh5o43l): the evaluator verified the\ngoal correctly but answered with the eval prompt's bullet labels\n(\"**MET**\" five times) — the regex never matched and the room failed\nclose\n[…]\ninst goal iterations.\n- presets/relay-local-9b.json: the 9B relay line-up used for the chaos\n  validation runs (chaos-v4 resolves live in ~45s).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(goal-eval): goal_verdict tool + format/dispatch repair retries (…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-12T13:43:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "19ed84b4c47afdd4574683b207adc8570826fe39",
          "body": "⏎ there opens the composer on a blank roster, so bare /preset is now a\ncomplete entry point — list, load, apply, remix, or start from scratch —\nand the picker no longer dead-ends when zero presets exist (the old\nany-key-dismisses-empty path is gone; + new is always there). Preview\npanel swaps to a one-line explainer on that row; footer hints follow.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): preset picker ends with a virtual + new row",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T23:27:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c91b5985099dfecb64c508a45aa95163543bcd33",
          "body": "…atalogue\n\nDax's feedback on the v0:\n- 'a' now opens a template picker (the server's persona templates:\n  scout/builder/auditor/… with blank on top) instead of only blank —\n  a team is mostly assembled from roles the app already knows; second\n  builder in a roster dedupes to builder-2.\n- ⏎ on the mo\n[…]\n card → ⏎ model →\n'haiku 4.5' → saved; squad.json carries anthropic/claude-haiku-4-5 with\nthe seed prompt correctly stripped. TUI suite 142/142.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): composer — add-from-template picker and searchable model c…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T23:14:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f3bb99d9675b270a33becc5ae7fc8efd5249c441",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: composer v0 shipped — statut header on the idea doc",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T22:59:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5cbcc15b177ec6b97fcac3f8ea788d4bb29e74ab",
          "body": "…er card)\n\nTwo stacked screens, both preset-DOCUMENT editors (no live room touched\nuntil /newroom): a roster screen (condensed line per member, a/d/x/K/J,\nteam-stats footer with coverage holes, two-step esc before discard) and\nthe member card (IDENTITY/TOOLS grouped core-web-orch/BRAIN with model\nbe\n[…]\ne 140/140.\nVerified live against a :5399 scratch instance end to end (compose →\nsave → file on disk → /preset edit round-trip, 🐺 clean on disk).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): /preset new|edit — the team composer (roster screen + memb…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T22:58:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "540515fc5d3babbc1e3f1a6fdd843a16563f7eea",
          "body": "…dation + warnings\n\n- parsePresetFile in validation.ts: rejects with the persona NAMED in the\n  error (unknown tool, dup id, bad thinkingLevel enum) so an LLM author can\n  read and fix; hydration semantics honored (absent = inherit, skills: []\n  = explicit opt-out); non-blocking warnings (parallel p\n[…]\neal wire format\n  (compactionInstructions/vision/skills), PresetFile.handoffGates,\n  api.savePresetDoc().\n- 16 unit tests; full suite 1219/1219.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(presets): PUT /api/presets/:name — document write with loud vali…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T22:44:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fec7108d11921bdf0ff2b9e710ab8a09ace2ba8f",
          "body": "…ge, orchestrator as author)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: idea — /preset new team composer in the TUI (preset as a langua…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T22:44:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "72ba1a45c339d7c9e878599e888ec57462f58800",
          "body": "…91.25% vs 90.5%, noise ±2.5%)\n\nFirst assignment-language header in the stack ('You hold the\nrouting-supervisor seat for this one decision' — duties attach to the\nseat). Two runs per variant on the re-synced T2: indistinguishable\nwithin noise, as predicted — a stateless micro-decision has no surface\n[…]\nures the 'loses nothing' half of the\nfused-seats §2b hypothesis; the 'wins' half needs long turns\n(reasoning-chars per dispatched turn), not T2.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(supervisor): seat-framed system prompt — A/B'd cost-free on T2 (…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T19:31:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8de034af007e4207a6bf05d4d2575d3203c05312",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: backlog #9 marked shipped (4cb1d15)",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T19:23:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4cb1d15ae123cbf8afc77a1ebeb6097c741f4f36",
          "body": "…rain it (backlog #9)\n\nThe local 27B falls into an overthink attractor on open-ended briefs\n(130K reasoning chars for a 5.7K reply, discussion 57). A prompt can't\nbreak a loop mid-generation; the harness can: src/reasoning-budget.ts\ncounts streamed thinking deltas against a per-turn budget and, on\nb\n[…]\noints 1/2 and 2/2 posted in-transcript, the\nmodel answered the menu with '(b) answer now.' followed by a complete\nverdict. 1203/1203, tsc clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(budget): reasoning checkpoint — frame the reasoning, never const…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T19:23:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5ecd29cf74c6367cc8bab3a29cc0d8843c907dce",
          "body": "… (18/20)\n\nBench seatTag now mirrors production (derived from the runtime model,\nso it tracks whatever GGUF serves the run). The model annotations help\nthe local supervisor: 90% vs the 85% pre-annotation baseline. Misses on\nrecord: B1 failing-tests-to-scribe accepted (fails open), C1/C3\nrefuse-instead-of-transfer (half credit).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: T2 bench re-synced with the annotated prompt — new baseline 90%…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T18:44:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "04a43850ba484b82c74377f8005e99c1ac09df8f",
          "body": "…exit, and teardown can't clobber it\n\nCloses the auditor's shutdown-flush debt (#7 medium): shutdown awaited\nneither the store writeChain nor an in-flight 400 ms debounced\nscheduleSave — the last snapshot was losable at exit. Now\nstore.flush() waits the chain out, Room.flushWrites() fires a pending\n\n[…]\nes past the seal. Verified live on :5399: participant added,\nSIGTERM inside the debounce window, snapshot holds all seeds + the new\nparticipant.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(store): shutdown flushes then SEALS — the last snapshot survives …",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T18:38:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2c9060d6c6547d5ebacb3ddb9b4d63ffb4a5f0f7",
          "body": "Frame the reasoning, don't constrain it: on budget breach the model\nchooses — continue (one line on what remains, bounded at 2/turn),\nanswer now, or ask ONE question. Per-seat budgets via the roster's\nlocal/cloud tag; every checkpoint leaves a transcript trace (zero\nsilent burn, same invariant as zero silent hop). What breaks a loop is\nnew information entering the context, not the cut.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: backlog #9 refined — reasoning checkpoint, not guillotine (dax)",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T18:30:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bca2f7c400e84689acb5e3ec2bacfbbd32089065",
          "body": "…ven, the CoT register is the asset\n\nThe tool-calling methodology in CLAUDE.md comes from an abandoned\nproject and was never validated by a training run; a seat LoRA would be\ndax's first fine-tune, which raises the phase-2 evidence bar. Added the\nregister-protection rule: off-the-shelf reasoning tunes of Qwen 3.6\nwould overwrite the Claude-shaped CoT the distill inherited.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(fused-seats): phase 2 honesty — the dataset methodology is unpro…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T17:12:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eca3add544a94044465c05b2a82d9affbd7ab077",
          "body": "…not asserted\n\nRoster awareness gave every agent the seat→model map plus a generic\n'write for the seat you address' rule; the planner overlay now carries\nthe lesson in the experience register with the real datum (2026-07-11):\nthe same local tester burned 130K reasoning chars on an open-ended\nbrief a\n[…]\nst — the\ndifference was the dispatch. Local seat: numbered, checkable, nothing\ninterpretive. Frontier seat: goal + constraints. Both directions.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(planner): calibrate the plan to the receiving brain — measured, …",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T16:07:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c2c3ea89f283146ed8537a8d3dbc3b24f5c12fed",
          "body": "… memory\n\nagent_memory reframed as the seat's logbook: lessons belong to the\noffice, duties bind the occupant. More honest by construction — Dax\nswaps models mid-session, so 'you remember doing X' goes false the\nmoment the reader isn't the writer, while a logbook signed by the seat\nstays true for wh\n[…]\nxperience\ndispositional prompts hold on the Claude-lineage 27B). The stock of\ntrue lessons is already on disk: silent hops, F1, the store crash.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(fused-seats): seat logbooks — institutional memory, not personal…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T15:51:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb4a9dc2552dbf1f4ee9649881cf4860c5524637",
          "body": "…e, the character is false\n\nDax: 'I don't play the helpdesk role, I take the helpdesk seat.' Persona\nprompts invite performing a character (and its theatrical flaws — part\nof overthink is performed thoroughness); seat prompts assign duties to a\ncapable actor. On a shared seat, role-play becomes self\n[…]\nng this diff') while seat framing\nstays coherent. Recusal vocabulary states the auditor rule for free.\nA/B-able on the T2 bench before adoption.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(fused-seats): assignment-not-role-play framing — the seat is tru…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T15:28:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b9c349ce3ae43cdd0eb90f3d9af57fb1ff34c345",
          "body": "Dax's fusion idea, decoupled into the two fusions it contains: context\nfusion (hats on seats — zero training, session-key indirection only,\nrouting/traces/supervision untouched) and weight fusion (phase 2, LoRA\nper seat only, gated on measured hat drift). Auditor fuses with nobody —\nstateless, fresh\n[…]\nh\nsynthesizes outputs of stateless parallel calls over an opaque ensemble;\nwe fuse long-lived working contexts, observably and for fewer tokens.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: fused-seats sketch — role hats on shared contexts (backlog #10)",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T15:19:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "488c38bb99f4c70850899afc651da98fdeae7d78",
          "body": "…tern detection)\n\nQwopus stock has no thinking-level control and loops in an overthink\nattractor on open-ended instructions (discussion 57: 130K reasoning\nchars for a 5.7K reply; a near-mute 44K/33-char turn). A system prompt\ncan't break a loop mid-generation — the harness can: cap streamed\nreasoning per turn, abort on breach, re-inject a steering message that\noffers exactly two exits (answer now, or ask @planner one question).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: backlog #9 — per-turn reasoning budget (resource bound, not pat…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T15:06:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dfaf022e3d93e0a5cdc525c3dde72430e271b1be",
          "body": "…×N burst aggregation\n\nA 100-call turn used to render 100 lines in the live block. The live\nview now aggregates consecutive same-tool ok calls (read ×6 a.md, b.md,\n…) and shows only the last 3 groups, with two guarantees: the header\nalways carries the full count (· N ✗ · M earlier), and an error can\n[…]\nlls' expander.\n\nVerified live on a :5399 scratch instance (window, pinning, both\nctrl+o directions); windowing logic unit-tested in activity.ts.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(clients): live tool-call window — last 3 groups, pinned errors, …",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T14:53:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "be5db82d9148e21969c6a51f8d6741fab57a09b7",
          "body": "…ush debt + resource-aware supervision sketch\n\n- decision: user dispatch outranks supervisor + zero-silent-hop glyph\n  invariant (✓/↪/✗/⚠/≡), with ↪ recorded as unit-only (never observed\n  live — auditor's exactness correction)\n- verification debt: live re-run #3 PASS line (7 glyphs on raw session\n \n[…]\n-session\n- docs/resource-aware-supervision.md: design sketch (dax's idea,\n  2026-07-11) — supervisor sees context pressure, can order compaction\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: ROADMAP catch-up — decision record, re-run #3 PASS, shutdown-fl…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T14:53:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3949086add2486dffc858a56055da6af911f7466",
          "body": "ENOTEMPTY on parallel-run teardown (backlog #8); 100% green in\nisolation, so retry the removal instead of serializing the suite.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: room-goals teardown flake — rmSync with maxRetries",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T14:53:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "637a4c069a14f577b388aaab8ddc544aa4cc7c18",
          "body": "…aveCurrent catch\n\nTwo halves of the same failure class:\n- store.write: overlapping void saveCurrent() calls collided on a shared\n  tmp path — the losing rename threw ENOENT as an unhandled rejection and\n  took the process down (softer case: dropped the snapshot silently).\n  Writes now chain (last-i\n[…]\n,\n  and never fatal (auditor medium, #7).\n\nKnown debt (ROADMAP): shutdown does not flush the writeChain nor an\nin-flight debounced scheduleSave.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(store): saves never crash the server — serialized write chain + s…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T14:52:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "29c6cab61d062567700698cacf81e4eb80b5406a",
          "body": "…≡ on coalescence\n\nThree live runs were burned because legitimate routing paths were\nindistinguishable from a supervisor bypass. Every supervised hop now\nleaves a transcript trace:\n- runner no-decision degradation: ⚠ signed by the supervisor\n- dead-supervisor degradation: ⚠ system-authored (nobody t\n[…]\n(decision\nrecord in ROADMAP). Live re-run #3 PASS: ✓/✗/⚠/≡ observed on raw session\nJSON; ↪ stays unit-only. Chain repro test pins the invariant.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(supervised): no silent hop — ⚠ traces on both degradation paths, …",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T14:52:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b1d7b7475dba05d999124067f08ae833ceed0824",
          "body": "…brain\n\nAgents were roster-blind: the handoff enum carries ids only, so the\nplanner routed by role name and hoped. It could not apply its own\nplaybook (\"count backends\" needs to know which seats are local), the\nsupervisor judged transfers without knowing the brains behind the ids,\nand a brief writte\n[…]\n delivered \"(Roster\nchange: @scout was deactivated)\" to the tester with the scout absent\nfrom the fresh block. 1163/1163 tests, typecheck clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: roster awareness — agents know who is in the room, and on what …",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T01:00:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1374b3a255510d12e19c8ce7dd0db77f4c1178a5",
          "body": "Resolves the user-side F5 (known issue, 2026-07-11): user-message routing\nscans the whole text for @mentions, so pasting a transcript or report that\nquotes agent handles routes those agents — session mrff3qwe's surprise\n@tester turn came from a pasted smoke report containing\n\"✗ @builder → @tester re\n[…]\ne\nincident-shaped draft shows the segment pre-send; plain drafts show none.\n1151/1151 tests, typecheck clean across root, client-core, tui, web.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(clients): routing preview — the draft says who it will dispatch",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T00:28:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "305b4c61ae659ff102aed8c45d40f80a5b689cd8",
          "body": "…s catch up\n\nFirst phase-2 measurement: 20-case route_decision bench through the real\nrunner (prompts in the exact buildSupervisorPrompt format), local Qwopus\n27B in the supervisor seat. Stock prompt: 14.5/20. Three added rules —\nhandoffs are earned by content not tone, prefer transfer over refuse w\n[…]\n\nBench harness: workspace/shakedown/bench-route-decision.ts (untracked on\npurpose — a scratch instrument, re-run after prompt or quant changes).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(supervisor): measurement-tuned decision prompt (73% → 85%) + doc…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-11T00:16:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "094298960504e55d716cc85d3a2d7741afe89d89",
          "body": "…a TOCTOU race\n\npi's agent loop runs a batch's tool calls in PARALLEL unless a tool in the\nbatch declares executionMode \"sequential\". The one-handoff-per-turn guard\n(b4c7194) peeks then registers — under parallel execution two handoff calls\nin one reply both peek before either registers, both return\n[…]\n content (the trigger of this investigation:\n  a pasted report containing \"✗ @builder → @tester\" routed both)\n\n1144/1144 tests, typecheck clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: turn-control tools execute sequentially — one-handoff guard was …",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T22:55:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c13c0b5f67d5e243f2abebd8f4a646af473ac6f",
          "body": "New routingMode \"supervised\": every handoff proposal is decided by the\nsupervisor agent (default: planner) instead of a human — accept, refuse,\nor transfer, one decision per proposal set. Reuses the existing\npendingRoute/resolveRoute machinery; only the approver changes.\n\n- route-supervisor.ts: stat\n[…]\n 47 new — tool contract, wiring smoke, full matrix (back-compat,\ndegradation, cap, traces, abort inertness). 1140/1140, typecheck ×4.\nLive smoke against a real model: PASS (report in room transcript).",
          "is_bot": false,
          "headline": "feat: supervised routing (phase 1) — the planner as approver, not as hop",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T22:30:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c4f86fef66f9706c97b755473bb0cac72db8c5d",
          "body": "The README still documented June's system: @mention routing (dead since\nthe explicit handoff tool), a presets table that matched no file in\npresets/, no mention of gates, skills, sub-rooms, task board or\nmulti-room — and 300 lines of implementation notes that belong in a\nreference, not a pitch.\n\n- R\n[…]\n routes,\n  handoffTo on message events, handoff/gate mechanics replacing the\n  @mention section, seed persona tools/skills matching personas.ts.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: README rewritten around the current philosophy + docs/REFERENCE.md",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T20:04:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ea58f8f3a1b6424950fa8d5f5c500f62397d7092",
          "body": "…me claims\n\nThe tmux cheat sheet skill was dead documentation: human keybindings\ninjected at agents who never press Ctrl+b, with a description that never\ntriggered a read. Replace the genre with a procedural playbook:\n\n- skills/live-verify/SKILL.md: trigger-worded description (runtime claims\n  requi\n[…]\n\n  scenario to the tester\").\n\nAll presets inherit the grant via skills strip-if-identical rehydration —\nzero preset edits (verified on mainmix).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: live-verify skill — auditor/tester drive the real app for runti…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T18:24:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b4c7194628d01c3d028dbbda82d66cfb9a45dfd1",
          "body": "Root-caused from live session mre5zpel (2026-07-10): the auditor was\nbypassed in round 1 (builder edited src/ and handed straight to tester),\ntool-only handoffs were invisible in every client (tester silently handed\nto scribe twice — read as random turn order), and a batched double\nhandoff(to:) sile\n[…]\nT=5399 instance\n(settings round-trip, 400s, preset + conversation persistence) and\nvisually in both clients (Planner→Tester→Planner round-trip).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: handoff review gates + visible handoffs + one-handoff-per-turn",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T16:46:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a4b0d8d09a0df44b3286febb7b66d6d586280a69",
          "body": "…s repaired, SKILL relaxed + heterogeneous parallelism; TUI header divider + conversation title",
          "is_bot": false,
          "headline": "orchestration wiring: skills inheritance (strip-if-identical), preset…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T15:51:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa6818efa2ef199265f22b30c97c0d7bcdb85540",
          "body": "…nner\n\nPersonas can now carry Agent Skills (agentskills.io): `skills: [\"name\"]`\nresolves to <skillsDir>/name (PIPELINE_SKILLS_DIR, default ./skills),\nflows into the participant's DefaultResourceLoader as\nadditionalSkillPaths — pi injects name+description into the system\nprompt and the agent reads th\n[…]\nrough the confined read tool,\nand quotes its headings. 1070 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "feat: persona-scoped Agent Skills + orchestrator playbook for the pla…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T01:06:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "86152d85d525b412178cd1b57a483daa78e8c5a5",
          "body": "Status bar ticks the running agent's elapsed once a second — \"▶ running\n🔨 Builder · 9.0s\" — from a new runningSince in client state, restarted\non every turn-phase agent event so a chained drain reads per-agent (the\ntick lives inside StatusBar so only it re-renders per second).\n\nFix: the transcript's\n[…]\neam shows \"thinking…\" reappearing after each tool run.\n1067 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "feat(tui): live elapsed counter + re-arm \"thinking…\" on a second burst",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T00:52:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c90cf70729cb2a3f504a6c64bb1adcd762300fcb",
          "body": "pi's SessionStats carries no timing, so the room measures the turn\nitself: wall-clock around run()/followUp() in executeAgent — started\nafter the local-model lock is acquired, so it reads \"how long was the\nagent active\" (streaming + tools), not \"how long did it queue\". Stored\nas durationMs on the tr\n[…]\ns in the\ntranscript API, header rendering in the TUI). 1065 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "feat: per-turn agent duration in the message header",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T00:41:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5ce7750af59ac9108122c2bf0fb0e454babc588",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "chore: bump pi-coding-agent 0.80.3 → 0.80.6 (/update-pi)",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T00:21:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "97d98b34899fb849e276b7ef697e0448a8b419a0",
          "body": "Third strip row per agent — \"14K/200K\", yellow when ≥80% (the in-cell %\nalarm moves there; it still appears in-cell when no usage data exists).\nThe model row now names what \"default\" actually resolves to: the server\nexposes the process default ref as `defaultModel` in the settings\npayload and SSE se\n[…]\nturn), usage updating live after a Scout turn (0→14K).\n1063 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "feat: context-usage row on the roster strip + resolved default model",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-10T00:19:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "360240781c2d0e302d2c01a9049804af4fdf4fdf",
          "body": "Second strip row naming each agent's model (Dofus portrait style), shown\nonly when at least one agent pins one; agents on the room default read\n\"default\" dim. prettyModel() shortens a ref for a cell: provider/org and\nrepeated vendor words dropped (\"minimax/minimax-m3\" → M3), \"claude-\"\nfamily prefix \n[…]\nappears/disappears live as\nmodels are pinned/unpinned. 1060 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "feat(tui): model row under the roster strip — Opus 4.8, Fable 5, M3",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T23:52:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9f7bdac31644380f6bd19950519cc6026f013a05",
          "body": "The 26-column sidebar stole a quarter of the terminal and vertical bars\nare foreign to TUI idiom. The roster is now a one-row timeline under the\nroom tabs (Dofus turn-bar style): one colored cell per agent (status\nglyph + icon + name), the running agent highlighted inverse in its color,\npaused agent\n[…]\n truecolor cells,\ninput box integrity across repaints. 1051 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "feat(tui): roster as a horizontal timeline strip — full-width transcript",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T23:27:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07fd74fe7fbce9c588f7b6753a955261da8719fd",
          "body": "…he layout\n\nA raw \\r or \\n landing in the single-line input value (multi-line paste\nvia Ctrl+V or the terminal, or text+Enter arriving as one stdin chunk so\nInk never parses key.return) split the rendered row, overflowed the\nfixed-height layout, and Ink's repaint shifted rows — the input box\nappeare\n[…]\ne call\nraces the chunking and reproduces exactly what a user paste does.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "fix(tui): flatten CR/LF at input insertion — multi-line paste broke t…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T23:27:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c2c11e9207619caf3f31c7a93458e7f68c9a5b85",
          "body": "…ting color\n\nThe input box border was fixed cyan; the only mode feedback was the tiny\nprompt glyph, and typing \"!\" gave no hint at all that the input had\nswitched semantics. Now the border (and glyph) follow the mode:\n\n- \"/\"  → yellow, matching the command palette, + dim \"command mode\"\n- \"!\"  → red \n[…]\n31m!/36m auto/34m semi/90m\nmanual, hints render dim in the border color.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EeGxeA8tJio6iVm67nmkuZ",
          "is_bot": false,
          "headline": "feat(tui): input border speaks the mode — / yellow, ! red, text = rou…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T22:33:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b85cc00ff063ff65a8100f3d01c84906b42ee030",
          "body": "\"(no response)\" on a turn that ran tools but wrote no text misleads both\nthe user AND the other agents reading the transcript — observed live during\nthe batch-terminate verification: scribe read builder's batched tool-only\nturn as \"the builder didn't respond\" and the two derailed for two turns\nargui\n[…]\ne callout is the body) > tool-only (explicit) > truly empty placeholder.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "fix(room): tool-only turns say \"(tool calls only — no text reply)\"",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T20:41:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0d14bcef11a44e9ddf4776263c5ca7192b339196",
          "body": "Forced the 27B to batch (instructed two <tool_call> blocks in one message):\nit emitted [handoff, read] together, and builder's pi session jsonl shows\nboth toolResults followed by ZERO further assistant messages — the guard\nforced terminate onto the read result, ending the turn immediately. The\nlast \n[…]\nng-hardening piece that only had unit-level evidence now has a\nlive one.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "docs(knownissues): live datum for the batch-terminate guard",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T20:16:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7441c1806d37ca2bca91c8fc86f8259c7bba58a8",
          "body": "A turn whose whole output is a question (increasingly common now that the\nQCM makes ask_user attractive) baked a literal \"(no response)\" into the\npersisted transcript, rendered as filler right above the 🤚 callout that IS\nthe turn's real body.\n\nturnBody() in room.ts: reply if present; else empty when\n[…]\nve-verified: planner QCM turn renders thought → tool call → 🤚 + options.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "fix(room): ask_user-only turns post empty text, not \"(no response)\"",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T20:08:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2403a9d9ca12fe96f31c128706e15eb39448af45",
          "body": "…tion\n\nThe mtime-based \"most-recently-modified non-completed .md\" selector has had\nno production caller since 572ed51 made routing consult only the room's\nexplicitly adopted plan (planAdoptionId → findPlanById). Keeping it invited\nsomeone to reach for it again — the mtime heuristic is exactly what l\n[…]\now clean.\n\n1036 tests green (−11 deleted with the dead code), tsc clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "chore(routing): remove findActivePlan — dead since explicit plan adop…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T19:57:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a368474637402812ceb0194b5c632d975edc709d",
          "body": "…eplies\n\nUser messages rendered as a bare right-aligned bubble; in a long scrollback\nthat reads ambiguously next to agent replies which all carry an icon+name\nhead. Adds a muted \"You\" head (agent-head styling, no accent color — those\nstay with the agents), matching the TUI's \"── You ──\" rule.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "feat(web): \"You\" head above user bubbles — author parity with agent r…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T19:29:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ff42d56af0105178923d95c198f51c4d2aa81430",
          "body": "With the answer picker open on a full transcript, the \"── You ──\" header rule\nabove the user's message vanished, leaving stray dash fragments at the end of\nshorter rows (dax, 2026-07-09). Root cause: the picker adds optionCount+4 rows\nbelow the transcript, but Transcript's height math hard-codes the\n[…]\nthe report is by design: user bubbles never had an author\nlabel there.)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "fix(tui): reserve the QCM picker's rows in the transcript height math",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T19:24:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9693af9cd8122eaa6385622ef03c0ce4fbf328d6",
          "body": "The TUI counterpart of the WebUI's per-agent \"…\" dropdown: Ctrl+R (or\n/roster) opens an agent picker (live hints: status, ctx usage, model, ⭐\ndefault, type-to-filter), Enter opens that agent's contextual action menu,\nEsc steps back to the picker (SelectOverlay's onCancel exists for exactly\nthis subm\n[…]\n:true confirmed server-side; kick\nvia confirm → roster 4→3 server-side.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "feat(tui): Ctrl+R roster menu — per-agent actions without typing @names",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T18:56:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64a39879a1995726a7cf3aae65f71f86c810b79b",
          "body": "…ebUI\n\nask_user gains `options?: string[]` (2-6 short choices). The user-side mirror\nof the handoff enum and the no-handoff menu: the whole human↔agent loop is now\nclosed-choice wherever the answer space is known — the model generates the\nchoices once and the reply comes back verbatim, nothing to pa\n[…]\nd, free-text fallthrough clean,\noptions persisted in the session jsonl.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "feat(ask_user): QCM — closed answer options with pickers in TUI and W…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T18:54:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "572ed51ff6eafc388682a68ed942bfb68976d33d",
          "body": "…opted\n\nA conversational planner reply with no handoff was silently dispatched to\ntester, who began restarting/killing backend processes. Root cause:\nplan-aware fallback routing picked \"the most-recently-modified non-completed\n.md\" in the shared .pi/plans graveyard (~50 never-closed plans across eve\n[…]\nests now adopt via a mutating activity,\nexercising adoption end-to-end.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CxAuX2pxAUMZmLuRSoU8rJ",
          "is_bot": false,
          "headline": "fix(routing): scope plan-aware routing to a plan the room actually ad…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T17:26:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c4e1432bf6b0a212031e05b3d49162755cb754f2",
          "body": "Four Qwopus agents with NO bash (the only non-jailable tool) and no\nweb/orchestration tools: three write-capable couriers (builder, scribe,\ntester) plus a read-only planner evaluator. Paired with a throwaway\nworkspaceDir, a room on this preset cannot touch anything outside its\nsandbox — used for the live relay/ping-pong handoff validation.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EpMf6cCp7BB3G85UUxDUZn",
          "is_bot": false,
          "headline": "test(shakedown): relay-local preset — bash-free full-local routing arena",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T15:49:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "001241ebeac2e00bcb1a3af8b57c31772978b7b4",
          "body": "…ript\n\nWork receipts were WebUI-only — client-core's store already carried\nreceipts keyed by message index, the TUI just never consumed them. The\ntranscript now renders the same block under each owning message:\n'📦 work receipt — filesystem-verified' plus one line per change,\ncolored by kind (+ green\n[…]\n appears on a real builder turn.\n+5 tests. 75/75 green, typecheck clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EpMf6cCp7BB3G85UUxDUZn",
          "is_bot": false,
          "headline": "feat(tui): work receipts + per-agent colored separators in the transc…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T15:49:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6fecb348b56f541b4843286915867dcba67cba23",
          "body": "proposeChain called findActivePlan() with no argument, so EVERY room\nconsulted the global config.plansDir — the main workspace's .pi/plans —\nwhen resolving a no-handoff turn end. Observed live: a sandbox room\nping-ponged planner↔tester for ~11 turns (bounded only by the chain\nbudget) because the MAI\n[…]\ns OWN workspace plans when they exist.\n1020/1020 green, typecheck clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EpMf6cCp7BB3G85UUxDUZn",
          "is_bot": false,
          "headline": "fix(routing): scope plan-aware routing to the room's own workspace plans",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T15:49:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3ffcbaa42138a8e9320b6acdd6bf78bfde727af4",
          "body": "The + room / /newroom form only showed the selected preset's NAME while\napi.presets() already returns the full rosters — the form threw the data\naway. It now keeps the PresetFile[] and, when a preset is selected,\nrenders the same amplified view as the Presets overlay: icon summary +\nagent count on t\n[…]\nk to default hides the preview).\n+3 tests. 70/70 green, typecheck clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EpMf6cCp7BB3G85UUxDUZn",
          "is_bot": false,
          "headline": "feat(tui): preset roster preview in the create-room form",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T15:08:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a80b0f6a0071a46b2237345518d43ea3ea7c1c48",
          "body": "Two hardenings for the small-model (3-9B) routing target, following the\nF6 mechanical-termination fix:\n\nBatch-terminate guard (src/batch-terminate-guard.ts): pi-agent-core only\nends a turn early when EVERY tool result in a batch sets terminate: true,\nso a model batching handoff/ask_orchestrator/ask_\n[…]\nests (guard x7, menu x5). 1010/1010 green, typecheck clean\nroot/web/tui.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EpMf6cCp7BB3G85UUxDUZn",
          "is_bot": false,
          "headline": "fix(routing): batch-terminate guard + one-shot no-handoff menu",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T15:08:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1356a92a3eb0a54255f6aaf0dc6536d3519f1518",
          "body": "Issue 1 (knownissues): stopping a model mid-turn — or a turn dying on a\nterminal provider error (credit exhausted, 5xx) — discarded ALL of the\nagent's work from the room, while tool side-effects persisted: effects\nwithout narrative. Root cause was one shared choke point, not many:\nRoom.executeAgent(\n[…]\np update; logic extracted to a pure\nshouldAbortOnEscape() with tests.\n\n+11 tests (turn-salvage x4, goal-cancel+salvage integration x1,\nescape-behavior x6). 998/998 green, typecheck clean root/web/tui.",
          "is_bot": false,
          "headline": "fix(ux): salvage partial turn work on abort/failure + TUI Esc stop",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T04:18:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "39fec3c175dec18cc9e2970a0f14a4c5416cad32",
          "body": "…hestrator\n\nBoth tools returned an advisory tool result ('your turn ends now') but\nnothing stopped the agent loop — turn end depended on the model choosing\nto stop generating. Claude-family models stop; a chatty local 27B kept\ngoing: 13x handoff re-calls in one turn (target never dispatched, turn\nne\n[…]\n live (S2 re-run, local Qwopus scout): one handoff call, session\nends at its toolResult, builder dispatched and wrote, single wake per ask,\nGOAL_MET. +4 contract tests. 987/987 green, typecheck clean.",
          "is_bot": false,
          "headline": "fix(routing): mechanically terminate the turn after handoff / ask_orc…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T03:53:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa9f5de4b6585d2deb45bde61422d84b33e62b51",
          "body": "Agents pass the turn via handoff({ to }) — one tool whose `to` is an enum\nof active agents minus self — instead of a free-text @mention. Prose @name\nin an agent reply is now inert (closes the F5 misrouting bug at the root);\nhuman @name (resolveTargets) is untouched.\n\n- new custom-tools/handoff.ts; H\n[…]\n\n\nKnown limitation: handoff enum is static per session; a mid-room-added agent\nisn't reachable by existing agents' handoff until their sessions rebuild.\nMitigated by plan-aware fallback + human @name.",
          "is_bot": false,
          "headline": "feat(routing): explicit handoff tool, replacing agent @mention routing",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T03:02:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f7befcfb90f291bfc6faac123d584b1a1dea8604",
          "body": "ORCHESTRATION_TOOLS (spawn_room, check_room, stop_room, destroy_room,\nanswer_room) were wired into buildCustomTools() but silently stripped by\nVALID_TOOLS on every API create/edit — only the code-built seed planner\nescaped it (F0, shipped in 0.1.22). Import ORCHESTRATION_TOOLS as the\nsource of truth and sync the TUI/web allowlists.",
          "is_bot": false,
          "headline": "fix(validation): include orchestration tools in VALID_TOOLS allowlist",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-09T03:02:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b5db724710454e9a6be6bb73a1d035d6f23219a",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016NppKduSSU3tGUcaGk1gUY",
          "is_bot": false,
          "headline": "docs: ROADMAP — orchestration loop decision recorded",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-08T23:07:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd22d53f4f25772c9ca7edd9d78979d51fd5e40c",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016NppKduSSU3tGUcaGk1gUY",
          "is_bot": false,
          "headline": "chore: release pipeline-moe@0.1.22",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-08T23:07:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cbffaa25c6cc4fe6780f07725c7f753b28f62766",
          "body": "…ator/answer_room\n\nspawn_room records its spawner; on goal resolution the sub-room injects an\nOrchestrator report into the parent room and triggers the spawner's turn\n(passive if the parent is paused). ask_orchestrator (auto-granted in spawned\nsub-rooms) escalates a question to the spawner and pause\n[…]\n new tests (real-Room callback/report/eval-pause + tool units). 970/970.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016NppKduSSU3tGUcaGk1gUY",
          "is_bot": false,
          "headline": "feat: closed orchestration loop — sub-rooms report back, ask_orchestr…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-08T23:07:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9540f908f74febda3ddc8d0f5cf01d10b98b2324",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016NppKduSSU3tGUcaGk1gUY",
          "is_bot": false,
          "headline": "docs: ROADMAP — task board decision recorded",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-08T22:39:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2d97cdb0fdc44672d19722010d5916eb4b9a24df",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016NppKduSSU3tGUcaGk1gUY",
          "is_bot": false,
          "headline": "chore: release pipeline-moe@0.1.21, client-core@0.1.12, tui@0.1.38",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-08T22:39:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "970841e8995bc0603095e70bbb544c6abebf8577",
          "body": "…update/task_list\n\nRoom-scoped board, persisted with the conversation, broadcast over a new\n'tasks' SSE event + GET /api/tasks. Tools are context-gated on the board\n(not the persona allowlist) so previously saved personas get them too.\nTUI: TASKS summary under the roster + Ctrl+P // /tasks overlay (\n[…]\nkBoard unit, tool round-trip, real-Room SSE+persistence).\nSuite 961/961.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016NppKduSSU3tGUcaGk1gUY",
          "is_bot": false,
          "headline": "feat: shared task board — planner orchestrates with task_create/task_…",
          "author_name": "DAXZEIT",
          "author_login": "DAXZEIT",
          "committed_at": "2026-07-08T22:38:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 0,
      "commits_last_year": 244,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 6,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "pipeline-moe",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "multi-agent",
            "orchestration",
            "llm",
            "local-llm",
            "llama-server",
            "agents",
            "tui",
            "sse"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/pipeline-moe",
          "is_deprecated": false,
          "latest_version": "0.1.25",
          "repository_url": "https://github.com/DAXZEIT/pipeline-moe",
          "versions_count": 19,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 4385,
          "first_published_at": "2026-07-05T15:15:15.732000Z",
          "latest_published_at": "2026-07-19T20:00:49.418000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "packages/client-core/tsconfig.json",
        "packages/tui/tsconfig.json",
        "tsconfig.json",
        "web/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 139587,
      "source_files_sampled": 216,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "web/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 239,
        "malicious_count": 0,
        "assessed_package": "npm:pipeline-moe@0.1.25",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@earendil-works/pi-agent-core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.80.6"
        },
        {
          "name": "@earendil-works/pi-ai",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.80.6"
        },
        {
          "name": "@earendil-works/pi-coding-agent",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.80.6"
        },
        {
          "name": "@earendil-works/pi-tui",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.80.6"
        },
        {
          "name": "cors",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.5"
        },
        {
          "name": "express",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.19.2"
        },
        {
          "name": "express-rate-limit",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.5.2"
        },
        {
          "name": "tsx",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.19.0"
        },
        {
          "name": "typebox",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.16"
        },
        {
          "name": "youtube-transcript-plus",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.0"
        },
        {
          "name": "react",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        },
        {
          "name": "react-dom",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "DAXZEIT",
          "commits": 248,
          "avatar_url": "https://avatars.githubusercontent.com/u/113620658?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 4,
            "reason": "dependency not pinned by hash detected -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "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": 1,
            "reason": "9 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "724398178290880aa7ee8b77ae59cfb89dae5b1f",
        "ran_at": "2026-07-25T18:50:20Z",
        "aggregate_score": 2.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-25T14:00:09Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/DAXZEIT/pipeline-moe",
    "host": "github.com",
    "name": "pipeline-moe",
    "owner": "DAXZEIT"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 39,
      "inputs": {
        "security": 40,
        "vitality": 35,
        "community": 33,
        "governance": 30,
        "engineering": 58
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 35,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "commits_last_year": 244,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "244 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 244
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "critical",
            "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": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "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": 33,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "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": 61,
            "inputs": {
              "packages": [
                "pipeline-moe"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 4385
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,385 downloads/month across npm",
                "points": 48.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4385,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 30,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "critical",
            "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": 25,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "DAXZEIT",
              "public_repos": 1,
              "account_age_days": 1409
            },
            "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": "0 followers of DAXZEIT",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "DAXZEIT"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~3 yr old",
                "points": 9.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "pipeline-moe"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "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 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "19 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 58,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 40,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 4",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "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": "9 existing vulnerabilities detected",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:pipeline-moe@0.1.25 runtime dependency closure — what installing the published package pulls in — 239 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:pipeline-moe@0.1.25",
                  "assessed": 239
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 239,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 239,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 59,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "packages/client-core/tsconfig.json",
                "packages/tui/tsconfig.json",
                "tsconfig.json",
                "web/tsconfig.json"
              ],
              "agent_commit_share": 0.92,
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "packages/client-core/tsconfig.json, packages/tui/tsconfig.json, tsconfig.json, web/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "packages/client-core/tsconfig.json, packages/tui/tsconfig.json, tsconfig.json, web/tsconfig.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": "92 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 92,
                      "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 4",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 139587,
              "source_files_sampled": 216,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/216 source files over 60KB",
                "points": 54.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 216,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T18:50:24.632339Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/DAXZEIT/pipeline-moe.svg",
  "full_name": "DAXZEIT/pipeline-moe",
  "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.27.0 — metodología completa · wiki de métricas.

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