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

hxs996-beep / deepAct

CLI coding agent that guards every action: ambiguity check, design review, scope control.

GoMIT★ 4 estrellas⑂ 0 forksdesde may 2026Ver en GitHub ↗

hxs996-beep/deepAct tiene un índice de salud de 42 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (72/100) y la más baja, Security (14/100). Se actualizó por última vez hace 6 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

42
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

hxssssCuenta personal
0 seguidores1 repositorio públicodesde ago 2025WB company

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.

Métricas por categoría

Vitalidad

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

72Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 6 días
5.5/36Cadencia de commits — 8/52 semanas con commits
18/18Volumen de commits — 161 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_year161
human_commit_share1
days_since_last_push6
active_weeks_last_year8
Cómo se puntúa
27/27Publica versiones — 9 versiones publicadas
36/36Recencia de las versiones — última versión hace 7 días
27/27Cadencia de publicación — una versión cada ~6,1 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count9
latest_release_tagv1.0.3
releases_from_tagsno
days_since_latest_release7
mean_days_between_releases6,1

Comunidad y Adopción

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

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

Sostenibilidad y Gobernanza

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

35En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
2.8/22.5Distribución de commits — el principal contribuyente firma el 88% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,876
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 3/3 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs3
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de hxs996-beep
4/25Trayectoria — 1 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginhxs996-beep
public_repos1
account_age_days330
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

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

52Moderado · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
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_cino
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

85Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 9 topics
10/10Wiki
Datos de entrada utilizados
topicsai-coding-assistant, code-agent, code-agent-harness, deepseek-tui, deepseek-v4, golang, vibecoding, harness, deepseek-harness
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

14Crítico · 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.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — sin datos
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
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — sin datos
0/7.5Vulnerabilities — 13 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate1,4
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, token_permissions. Los pesos restantes se han renormalizado.

Preparación para IA

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

69Moderado · 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 — 93 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,93
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 22 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,22
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54.3/55Tamaños de archivo manejables — 2/147 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes91.578
source_files_sampled147
oversized_source_files2

Datos clave

4estrellas de GitHub
2contribuidores
161commits en los últimos 12 meses
6días desde el último push
9versiones publicadas
1factor bus
0issues abiertas
Goecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch go package 'github.com/deepact/deepact' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 1.4 / 10
1.4agregado

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-26 07:11 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
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
n/dDangerous-Workflowno workflows found
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
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
n/dToken-PermissionsNo tokens found
0Vulnerabilities13 existing vulnerabilities detected
Dependencias directas 14
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/BurntSushi/tomlv1.6.0go.mod
Gogithub.com/charmbracelet/bubbleteav1.3.4go.mod
Gogithub.com/charmbracelet/glamourv1.0.0go.mod
Gogithub.com/charmbracelet/lipglossv1.1.1-0.20250404203927-76690c660834go.mod
Gogithub.com/charmbracelet/x/ansiv0.10.2go.mod
Gogithub.com/ebitengine/puregov0.10.1go.mod
Gogithub.com/muesli/reflowv0.3.0go.mod
Gogithub.com/muesli/termenvv0.16.0go.mod
Gogithub.com/sergi/go-diffv1.3.1go.mod
Gogithub.com/spf13/cobrav1.8.1go.mod
Gogolang.org/x/netv0.38.0go.mod
Gogolang.org/x/syncv0.17.0go.mod
Gogolang.org/x/textv0.30.0go.mod
Gogolang.org/x/timev0.9.0go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "ai-coding-assistant",
        "code-agent",
        "code-agent-harness",
        "deepseek-tui",
        "deepseek-v4",
        "golang",
        "vibecoding",
        "harness",
        "deepseek-harness"
      ],
      "is_fork": false,
      "size_kb": 1038,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1074016,
        "Shell": 1646,
        "Makefile": 1245,
        "Batchfile": 2952,
        "PowerShell": 2466
      },
      "pushed_at": "2026-07-19T14:39:25Z",
      "created_at": "2026-05-31T05:36:08Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T08:57:29Z",
      "description": "CLI coding agent that guards every action: ambiguity check,   design review, scope control.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "hxssss",
      "type": "User",
      "login": "hxs996-beep",
      "company": "WB company",
      "location": "HZ",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/229309945?v=4",
      "created_at": "2025-08-29T10:27:13Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 330
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2026-07-19T00:13:39Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-07-02T03:40:45Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-06-29T11:46:29Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-06-14T15:39:38Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-06-09T15:13:53Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-06-06T14:59:09Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-05-31T14:29:19Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-05-31T06:37:56Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-05-31T06:01:05Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ed3e104d14fb2583526e97e2b2edab7a20f6ff3b",
          "body": null,
          "is_bot": false,
          "headline": "\\\"chore: remove temp check file\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T14:39:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b487b0767bad27f8537b3b8a2de8f1874cf349c",
          "body": null,
          "is_bot": false,
          "headline": "\\\"chore: add temp check file\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T14:39:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "702f5cb9e8845aa9b7f973dbdefea56cb2ae25e3",
          "body": null,
          "is_bot": false,
          "headline": "\\\"update readme: Roundtable -> Team mode\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T14:35:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90e5376801df3d309d022b0dc42ab9b7d3e04110",
          "body": null,
          "is_bot": false,
          "headline": "\\\"remove release badge from README\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T13:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4f70e7d846c0116da43a046ca2c18f83ca28e56",
          "body": null,
          "is_bot": false,
          "headline": "\\\"fix: use tag endpoint for release badge\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T13:01:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29f354dc5b6dec1e55412bbad29e4b190282c05d",
          "body": null,
          "is_bot": false,
          "headline": "\\\"fix release badge cache refresh\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T12:53:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fce4f804f372460c36a1c7309b6169634e4bedcb",
          "body": "# Conflicts:\n#\tREADME.md",
          "is_bot": false,
          "headline": "Merge branch 'feat/sub-agent-display' into dev",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-19T00:06:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "886d81826b7b4c3f95794ac024f3aa6ff1637b02",
          "body": "…gates/markdown, roundtable improvements, fix critic PASS dead-loop\n\n- Analysis report gate: add degradation handler (after 2 blocks, auto-waive and\n  request batched edits), scope AnalysisReportConfirmed to single Run to prevent\n  stale confirmation leaking across tasks\n- Intent classifier: refine \n[…]\nASS path dead-loop: remove 'don't trust -> re-run commands ->\n  re-verify if inconsistent' loop logic, replace with simple pass-through\n- UI: narration overflow handling, streaming render test updates",
          "is_bot": false,
          "headline": "feat: analysis gate degradation, intent classifier refinement, skill …",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-19T00:02:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "34e8c07486170ab43e6dd0f6a3b0cf869910f38e",
          "body": "- engine/content_delta_test.go: verify content_delta ProgressEvents emitted per chunk\n- ui/narration_test.go: verify finalizeTurnBlocks snapshots narration+toolTree, skips empty/whitespace",
          "is_bot": false,
          "headline": "test: add content_delta emission and finalizeTurnBlocks tests",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-17T01:56:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac64bc8a7b506b8d98797bc60fe274854819d3a6",
          "body": "- Engine: emit content_delta ProgressEvent during streaming (turn.go)\n- UI: accumulate content_delta into m.narration field\n- UI: finalizeTurnBlocks() snapshots narration + toolTree per turn at tool_start boundary\n- UI: render narration blocks with NarrationStyle (dim, indented)\n- UI: per-turn tool snapshots replace global type-grouped tool tree\n- Preserves isIntermediateText stripping for LLM history cleanliness",
          "is_bot": false,
          "headline": "feat(ui): stream AI intermediate narration as per-turn chunked blocks",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-16T10:19:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90e2508c97077566006da661237384e09806186c",
          "body": null,
          "is_bot": false,
          "headline": "docs: design spec for chunked streaming narration output",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-16T10:10:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5c67ba39391f6ef56c46708242ab6e2abcf02ee",
          "body": "…ary field",
          "is_bot": false,
          "headline": "feat: add task_complete tool definition and TurnResult.CompletionSumm…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T12:30:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d359b455d006d5d26c68f6676ee14eb0029e91eb",
          "body": "…uristics",
          "is_bot": false,
          "headline": "docs: implementation plan for task_complete tool replacing keyword he…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T11:32:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92757c0dfa8eaa5e58b1458ac04f06e034559b3a",
          "body": null,
          "is_bot": false,
          "headline": "docs: design spec for task_complete tool replacing keyword heuristics",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T11:22:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f060ed51fa5bab13209c9139c89e5ed6d8a1923",
          "body": "formatEditPlanSummary now lists each file to be modified with its\nrelative path and a brief old->new preview, so the user can see\nexactly what will change before confirming.",
          "is_bot": false,
          "headline": "feat: enhance edit plan summary with file paths and edit previews",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T10:11:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54ffe819810fd905ebc0e3482dcc75c143c99a00",
          "body": "When the agent has done searches (runToolCallCount > 0) and attempts\nedit/write for the first time, the gate blocks and injects a nudge\nasking the agent to output a text-only analysis report. The agent\noutputs the report, stop hooks end the Run(), and the user confirms\nbefore implementation proceeds.\n\nAfter 2 blocks the gate degrades to the edit plan guard to avoid\ndeadlock. Confirmation handling is extracted into\nhandleAnalysisNudgeConfirmation for testability.",
          "is_bot": false,
          "headline": "feat: add analysis report gate before edit plan guard",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T09:49:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f4cea2fe453814cf0a643dc9cdb74d18a175d8c",
          "body": "Add AnalysisMode and AnalysisReportConfirmed to TaskState. The constraint\nis now injected by context/builder.go on every Build call instead of the\nephemeral pendingPinnedMessages approach that was cleared after one turn.\n\nAlso adds pendingAnalysisNudge and analysisNudgeCount to the Engine struct\nfor use by the analysis report gate (Task 2).",
          "is_bot": false,
          "headline": "feat: persist ANALYSIS MODE constraint across turns",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T09:40:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a9914843b2e9091fb9edd9ec20162d6f77065d2",
          "body": "Identifies 5 root causes for why the agent jumps from search to\nimplementation without presenting analysis findings:\n1. ANALYSIS MODE constraint is ephemeral (only 1 turn)\n2. No engine-level 'report before implement' gate\n3. Edit plan summary lacks structured detail\n4. Intent classifier can't handle mixed analyze+implement requests\n5. Search-phase intermediate text is stripped\n\nProposes 3 components: persistent ANALYSIS MODE, analysis report\ngate, and enhanced edit plan summary.",
          "is_bot": false,
          "headline": "docs: add analysis report gate design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T08:40:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba889febf1f9a6f30a0170afc9446426deb9eec8",
          "body": "…on new files\n\nread_multi declared loopAction as zero-valued GuardAction (Type='')\nand only assigned it when a sub-target was blocked. When all\nsub-targets were Allow, loopAction stayed zero-valued and\nloopAction.Type != GuardAllow ('' != 'allow') was true, falsely\nblocking every read_multi on new files with an empty message.\n\nFix: default loopAction to GuardAction{Type: GuardAllow}. Add\nLoopGuard block log line. Regression test covers the all-new-files\ncase.",
          "is_bot": false,
          "headline": "fix(turn): default read_multi LoopGuard to Allow, fixing false-block …",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T02:51:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08c277405ca8eba4f0b5c2215d36d73b151701c2",
          "body": "… exit paths\n\nLog classifier verdict, error, retry count, and completion marker at\neach branch. Split the combined 'hasCompletionMarker || retry > 0'\ncheck into separate branches with individual log lines so production\nlogs show exactly which condition allowed exit.",
          "is_bot": false,
          "headline": "fix(stop-hook): add decision-point logging for classifier verdict and…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T02:51:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f8ab68a53432488baed377251a8dbc12a6c8377",
          "body": "glm-5.2 occasionally returns JSON in reasoning_content with empty\nContent (llm/deepseek.go:460). The classifier only read Content,\ngot empty string, failed with 'no valid JSON' and degraded to a\nclassifier_error fallback - causing unstable stop-hook decisions.\nNow falls back to reasoning_content when Content is blank.",
          "is_bot": false,
          "headline": "fix(classifier): fall back to reasoning_content when Content is empty",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T02:50:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c546c99c02a69aaa50e99638c25b8ded9bda5e72",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove accidentally downloaded .tgz and add to .gitignore",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:20:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc47165c357104443d8a1f7b277332555b0c0ccf",
          "body": "…+ add streaming render plan\n\nRevise stop-hooks design: clarify that while the stop hook mechanism\nitself is not wired into sub_agent.go, the conclusion classification\nlogic IS needed there — the 3-strike counter resets on tool calls,\ncausing critic verdicts to loop. Add detailed revision note (2026-07-08).\n\nAdd streaming render unification plan (glamour migration).",
          "is_bot": false,
          "headline": "docs: update stop-hooks spec for sub-agent conclusion classification …",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:20:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a50c2ff2036d4e82f15efe924452cb073f9edd99",
          "body": "Update '分析' intent to include anti-anchoring investigation method.\nAdd symptom-driven search guideline and a new '反锚定' section with\n5 principles: generate multiple hypotheses before searching, use\nliteral details as primary search terms, read all first-round\nresults before deep-diving, prefer simple causes, trace the full\npath from data generation to user-visible output.",
          "is_bot": false,
          "headline": "docs: add anti-anchoring methodology to system prompt",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:20:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3d1f59add32fc68901e1ecc3d99457ce6acd655",
          "body": "…nes in streaming\n\nmember_start: reset existing member to 'running' instead of appending\na duplicate entry when a member reappears in a later debate round.\n\nrenderStreaming: add collapseBlankLines() to the glamour rendering\npath, collapsing 2+ consecutive blank lines to one. Glamour renders\nfenced code-block content literally, so blank lines inside blocks\n(e.g. critic Check blocks) produced large visual gaps. Mirrors the\nlegacy wrapText path behavior.",
          "is_bot": false,
          "headline": "fix(ui): dedup member status across debate rounds + collapse blank li…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d02f4b278bc8c250e60e5c636ff661d1eabace6",
          "body": "Remove 500-rune truncation (truncateString) so the verdict judge\nsees complete proposals instead of potentially missing critical\ninformation at the cut point.",
          "is_bot": false,
          "headline": "fix(roundtable): pass full member content to verdict prompt",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc43e41b4bebeaf882f9752a4cf2167a9a4a4e7c",
          "body": "The edit-plan guard's confirmation prompt showed reasoning text\ntwice: Summary (buildRunSummary) and Questions (plan summary)\nboth contained the reasoning, and the UI concatenates them.\nImplementation (loop.go:694-696) was already committed; this adds\nthe regression test.",
          "is_bot": false,
          "headline": "test: add regression test for edit-plan duplicate summary",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cbc59a30fbeaa86002d0d631f506adb1efd9789",
          "body": "LoopGuard read counts accumulated across Runs (engine reused via\nonce.Do). Cross-Run accumulation reached maxRepeats and falsely\nblocked normal reads. Implementation (loop.go:238-242) was already\ncommitted; this adds the regression test.",
          "is_bot": false,
          "headline": "test: add regression test for LoopGuard/ReadLoopState reset on new Run",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b33671d2f25930f959642bf877dca7813f86549",
          "body": "…ations\n\nCritic verdicts (e.g. '结论:失败 / VERDICT: FAIL') are text-only\nresponses that were nudged by the 3-strike mechanism. The nudge\ngoaded the critic into another tool call, resetting the counter,\ncausing it to loop to maxIterations (observed as 'turn 90' in\nproduction).\n\nFix: add ConclusionClassi\n[…]\n\nnext-step intent, terminate immediately. Conservative nudge on\nclassifier error. Three regression tests cover terminate-on-conclusion,\nnudge-on-narration, and nudge-despite-classifier-false-positive.",
          "is_bot": false,
          "headline": "fix(sub-agent): terminate on conclusion instead of looping to maxIter…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "676bee50c7bcbf78cbc5d1436cc5a96df2479d9a",
          "body": "…c pre-check\n\nStalledNarrationHook now uses a three-layer decision:\n1. Heuristic pre-check (hasFutureIntent, hasTrailingNextStepIntent)\n   blocks obvious intermediate narration without calling the LLM.\n2. LLM ConclusionJudge (IsConclusion) classifies ambiguous text.\n3. Conservative guard: classifier\n[…]\nfier context.\nExhausted signal (Exhausted=true) replaces silent pass-through after\nMaxRetries. Nil-classifier safety and error fallback to completion\nmarker check. Tests rewritten with stubClassifier.",
          "is_bot": false,
          "headline": "fix(stop-hook): replace pure heuristic with LLM classifier + heuristi…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c83dae00afe9b52ed2af8d80341509b4f7156b80",
          "body": "detectUserIntent now uses IntentJudge (LLM) instead of isAnalysisOnly/\nhasContextReference/isSameTopic keyword matching. Keeps isDangerousConfirmation\nas a deterministic safety fast-path. nil/err fallback to IntentContinue.\nWired in cmd/exec.go and ui/runner.go via SetIntentJudge.",
          "is_bot": false,
          "headline": "refactor: replace keyword intent detection with LLM IntentJudge",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d65817ee08224e05586be29eabcec616e2331d7",
          "body": "Mirrors ConclusionClassifier: flash model + JsonMode {intent} output.\nReplaces keyword-based isAnalysisOnly/hasContextReference/isSameTopic.",
          "is_bot": false,
          "headline": "feat: add IntentClassifier LLM judge for user-intent classification",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T10:40:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b9de5532df438eb0df700329725cfdb916f6120",
          "body": null,
          "is_bot": false,
          "headline": "docs: add intent-judge-llm implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T10:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d618111b688d5e873cb43df085593891f3f5897a",
          "body": "Replace keyword-based user-intent classification (isAnalysisOnly/\nhasContextReference/isSameTopic) with an LLM IntentJudge, mirroring the\nConclusionClassifier pattern. Keeps isDangerousConfirmation as a\ndeterministic safety gate.",
          "is_bot": false,
          "headline": "docs: add intent-judge-llm design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T10:27:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "702a37f1d568cdb451fa7fb4e18cfc7cd285f3e6",
          "body": "Mechanical signature change; no behavior change. Prepares for LLM\nconclusion judgment needing context (timeout) and user goal.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(engine): add ctx to StopHook.Check and Goal to StopHookContext",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-12T12:39:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "79cb248360574b7659923bc7763056aed6c572dd",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): add ConclusionClassifier for LLM-based conclusion judgment",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:29:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "21038dd99f393ef16bc94d3353741267353d6077",
          "body": "Guard state (LoopGuard/ReadLoop/ErrorLoop) no longer reset per-Run,\npreventing re-reads after plan confirmation. Edit-plan Blocked response\nno longer duplicates reasoning in Summary and Questions.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(engine): persist guard state across Run; dedup edit-plan summary",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:23:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6c11c90d8604a90503562fcb98628ce9765d01ea",
          "body": "Baseline before replacing with LLM conclusion judgment. Adds Exhausted\nfield, StalledNarrationHook with looksLikeNextStepNarration heuristic,\nZeroToolCallHook retry snippet, turn.go Exhausted->Blocked path, and\nrune-safe truncateStr. Includes stalled_narration_test.go.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): keyword-based StalledNarrationHook baseline",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:23:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2765d04d086b34dad0a129824083ed69a9f84532",
          "body": "TDD plan: ConclusionClassifier unit, StopHook ctx/Goal signature change,\nStalledNarrationHook LLM judgment, keyword heuristic removal, wiring.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Stop Hook LLM conclusion judgment implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:18:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "efb8323366130d375e5d13e6c83a1953f0714853",
          "body": "Replace StalledNarrationHook keyword-prefix heuristic (looksLikeNextStepNarration)\nwith an LLM conclusion classifier. Cancel the nextStepPrefixes/conclusionMarkers\nkeyword matching that caused premature loop termination on non-prefix mid-task\nnarration.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Stop Hook LLM conclusion judgment design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:08:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "899e0a82ee847c080c9c142ff723e3291a224fab",
          "body": null,
          "is_bot": false,
          "headline": "revert: remove unauthorized ModifiedFiles reset from loop.go and turn.go",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T11:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "792a75394515b8bcce03e5aa1bc14ee2c34b75a3",
          "body": null,
          "is_bot": false,
          "headline": "docs: add Stop Hooks design spec and implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:34:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "991e15c32278753dde598f4e2fa756dbd7e96e33",
          "body": "Wire ZeroToolCallHook into both cmd/exec.go and ui/runner.go so the\nstop hook is active in both CLI and TUI execution paths.",
          "is_bot": false,
          "headline": "feat: register ZeroToolCallHook in engine creation points",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:33:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be0bdde71c7788822f26c3e51a065651d03c8566",
          "body": "Replace text-pattern-matching isIntermediateText branch with structured\nstop hooks call. Stop hooks use behavioral signal (runToolCallCount)\ninstead of text content matching. Reset stopHookRetryCount on tool calls.",
          "is_bot": false,
          "headline": "feat: replace isIntermediateText with stop hooks in executeTurn",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:32:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0450eeec10307ddb4979dfd86ea2a7123359b38",
          "body": "…pHooks)\n\nAdd stopHooks/stopHookActive/stopHookRetryCount fields to Engine struct\nwith Run() resets. Implement SetStopHooks setter and runStopHooks method\nthat iterates registered hooks and returns first blocking result.",
          "is_bot": false,
          "headline": "feat: add Engine stop hooks integration (fields, SetStopHooks, runSto…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:32:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6dde9590368537b03583d753a9890d329eea851",
          "body": "- Split flawed && short-circuit in TestZeroToolCallHook_EnglishMessage\n  into three independent assertions (Block, non-empty, no Chinese chars)\n- Add TestZeroToolCallHook_NegativeMaxRetries covering MaxRetries=-1\n  edge case (defaults to 3 via <= 0 guard)",
          "is_bot": false,
          "headline": "test: fix EnglishMessage assertion and add negative MaxRetries test",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:29:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13654f3a00586f1edfbb3114b7c9d73ccebfab2d",
          "body": null,
          "is_bot": false,
          "headline": "feat: add StopHook interface and ZeroToolCallHook",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:25:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9de6a2b978f30f6c2e275ed9c6cf4aa603497851",
          "body": "Replace wrapText with renderMarkdown in renderStreaming so streaming\ndisplay matches final display. Add package-level cache to avoid\nre-rendering on every 100ms tick. Fallback to legacy wrapText path\nwhen glamour is unavailable.",
          "is_bot": false,
          "headline": "feat: unify streaming rendering to glamour",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-06T10:39:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "475206c50a0ac9c81679ee9848bc34434cb49e36",
          "body": "Replace wrapText with renderMarkdown in renderStreaming to eliminate\nblank-line gap between streaming and final display. Add package-level\ncache to avoid re-rendering on every 100ms tick.",
          "is_bot": false,
          "headline": "spec: unify streaming rendering to glamour",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-06T10:20:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90009830febeec160dfb515d52c63c662120b9ce",
          "body": "… update engine turn handling\n\n- Remove click-to-expand full-screen diff viewer interaction and '点击展开' hint text\n- Clean up all dead code: renderDiffViewer, computeDiffViewerLayout, buildHunkLineMap,\n  hitTestHunk, renderDiffHunkBlock, diff styles, hunkHit/hunkLineEntry types\n- Simplify SkillMatcher\n[…]\nogic\n- Update context promptset: remove en templates, update zh system prompt\n- Add sub-agent stream, activate_skill, and editplan tests\n- Add design specs and implementation plans for recent features",
          "is_bot": false,
          "headline": "refactor(ui): remove full-screen diff viewer, simplify skill matcher,…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-05T23:44:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ca98a2048ff225fcb2a2997e0a013c4297ee210",
          "body": null,
          "is_bot": false,
          "headline": "docs: add remove diff viewer implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-05T23:30:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb52283553c25b68aaa41c67ba3a051f2d560b10",
          "body": null,
          "is_bot": false,
          "headline": "docs: add remove diff viewer design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-05T23:25:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad01486c42e299e413b4575d65f9d741c743ce48",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add sub-agent stream/stuck-loop fix design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-05T14:37:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0e8341bc976f21d04a816286dcaa09c37f0d6efa",
          "body": "…allback matching\n\n- Add SkillMatcher interface + KeywordMatcher (existing keyword logic)\n- Add SemanticMatcher with MatchFunc callback for LLM-based matching\n- Add FallbackMatcher: keyword-first, semantic fallback on 0 matches\n- Extract activateSkill/showSkillSuggestions in engine loop\n- Refactor R\n[…]\nlMatcher interface\n- Wire FallbackMatcher into cmd/run.go EngineDeps\n- Fix AutoActivateThreshold doc comment (nil/0 → nil)\n\n11 new tests covering all matchers. No circular dependency (skill ⊥ engine).",
          "is_bot": false,
          "headline": "feat(skill): add SkillMatcher interface with keyword, semantic, and f…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T08:07:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e01150c61e0a9518ec8120d5e648b31f0f1f324",
          "body": null,
          "is_bot": false,
          "headline": "feat(skill): add SkillMatcher interface and KeywordMatcher",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T07:50:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74b6931f8022c48a766209ad403feff70728d4ad",
          "body": null,
          "is_bot": false,
          "headline": "docs: add skill semantic matching design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T07:35:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57fb6d823a14481026bb6ac65f05e388448df383",
          "body": null,
          "is_bot": false,
          "headline": "fix(ui): wrap overflow lines from lipgloss-rendered panels",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T04:52:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "060bfa7d4b827862deb8628c7084b6fd1ba4446a",
          "body": null,
          "is_bot": false,
          "headline": "fix(ui): remove ANSI skip in wrapLines, delegate to wrapLine",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T04:50:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0bfcfc708d1086f19e90e13037d5776912c0c00",
          "body": null,
          "is_bot": false,
          "headline": "feat(ui): delegate ANSI lines in wrapLine to wrapLineAnsi",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T04:49:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f522a41883bd66d9166ccfde9737779959108df9",
          "body": null,
          "is_bot": false,
          "headline": "feat(ui): add wrapLineAnsi for ANSI-aware word wrapping",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T04:47:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12f44f5c87a168e4ec87c57043cc87db4ba6905a",
          "body": null,
          "is_bot": false,
          "headline": "chore: update context builder for new RoundtableState fields",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:26:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e350281535cdb3fef686e15af3292763266654c9",
          "body": null,
          "is_bot": false,
          "headline": "test: update roundtable tests for debate arena",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:25:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2592b66cfa87f633543c31a1e5325c7b2f8f215f",
          "body": null,
          "is_bot": false,
          "headline": "feat: integrate debate arena into engine loop",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:21:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4879ec280d7ae05a0a6ba1f9ae4857896562313",
          "body": null,
          "is_bot": false,
          "headline": "feat: rewrite roundtable as debate arena with 4-round flow",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:20:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b506018aa622c1f468d98c2bd2aaff6541eb36fb",
          "body": null,
          "is_bot": false,
          "headline": "feat: add team config section and TeamMembers engine config",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:16:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ccf9b8a7d429e0a5b773f864a48264519613c0d",
          "body": null,
          "is_bot": false,
          "headline": "feat: replace domain roles with personality-based debate members",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:14:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "154205a9686710c94b8796074b86c1670f1cda4b",
          "body": "…rena",
          "is_bot": false,
          "headline": "feat: add DebateRound types and refactor RoundtablePhase for debate a…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:13:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f3c4f91047b048d7485fd026a04eeeb1e474f96",
          "body": "- Add computeDiffViewerLayout() for diff viewer coordinate mapping\n- Support mouse drag-to-select and copy in full-screen diff viewer\n- Pad body lines to terminal width to prevent Bubble Tea frame diff artifacts\n- Trigger full repaint on ESC exit from diff viewer",
          "is_bot": false,
          "headline": "fix(ui): enable text selection in diff viewer and fix scroll artifacts",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-02T12:25:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "276e0280e9201521252d8d64dcf60f029b83bc96",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: gitignore 忽略 .superpowers/ 工作流临时产物",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-02T03:14:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3966af220d6e6c42ad6b80c3820fc7302e19de50",
          "body": "UI diff 渲染:\n- diff hunk 默认折叠为摘要行([N] @@ 头 +N -M 点击展开),\n  点击 hunk 占满 body 全屏查看完整内容,ESC 退出\n- DisplayMessage 扩展 ToolTree 快照,完成后可点击展开\n- renderDiffBlock/renderToolSummary 改折叠摘要,删除 renderDiffHunkFlat\n- 全屏 viewer 复用 renderDiffHunkBlock,禁拖选、滚轮滚动\n- 顶部\"按 ESC 退出\"提示\n\nengine/context:\n- loop/turn/dsml/classifier/\n[…]\nisSubstantiveSummary 质量门\n- context builder/prompt、promptset system.md 调整\n\n其他:\n- README/cmd/go.mod 更新\n- diff 相关规格/计划归档至 docs/superpowers/archive/\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ui): diff 折叠展示 + 点击全屏展开,及 engine/context 调整",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-02T03:12:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1e2cb6e700a749201a48f7294b42b3353472575f",
          "body": null,
          "is_bot": false,
          "headline": "fix: replace Done with neutral tool summary text; dim toolsummary style",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T08:02:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18135d07aa800a26d75569256d4b602ebd2c07af",
          "body": null,
          "is_bot": false,
          "headline": "fix: lower CJK threshold from 10 to 6 runes for isSubstantiveSummary",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:57:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2528c656488aef23aeaed2c3250a91ee92f3b64",
          "body": null,
          "is_bot": false,
          "headline": "feat: add isSubstantiveSummary quality gate to buildRunSummary",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:56:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e01168ed46156a9d174c7f426dde1fd0b7248c6c",
          "body": null,
          "is_bot": false,
          "headline": "docs: add fix-done-no-conclusion implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:51:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b31a037c6c8f80697a88e51528ff4a8930e860f",
          "body": null,
          "is_bot": false,
          "headline": "docs: add fix-done-no-conclusion design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:48:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb2ce8aca92da55a26812a84c79a9bfcecbc5ffd",
          "body": "6 个 TDD 任务:countHunkAddsDeletes、renderDiffBlock 折叠摘要、\n全屏 viewer 渲染 + View 分支、点击命中展开、ESC 退出 + 全屏\n禁拖选滚轮、全量验证。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): 新增 diff 折叠展示实现计划",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:17:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd6c8799ea0802a2e3465fda6af2a6602416ad87",
          "body": "ghosting 只在 diff 混排滚动时出现,采用 hunk 级折叠 + 点击全屏\n展开方案从架构上绕开。默认显示 hunk 头 + 增删行数,点击 hunk\n占满 body 全屏查看,ESC 退出。全屏内禁拖选避免 ghosting 复现。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): 新增 diff 折叠展示设计规格",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:11:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "04943466ec9484a9a7b759ee0e8b10f5d2dbb702",
          "body": "R3: 删除 padLine,diff 行宽度交由 View 统一 ansi.Truncate,消除\nm.width/contentWidth/scrollContentWidth 三宽度不一致导致的滚动残留。\n\n同时新增 R1/R2 回归测试:含空行数组的 screenToLine 1:1 映射、\n选区复制不含 \\r。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ui): 移除 renderDiffBlock 全宽 pad 并补选区回归测试",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T15:33:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ed2dccc9cae16640d7b96c1bc8fbab3a72658d71",
          "body": "R3: 删除 padLine,diff 行宽度交由 View 统一 ansi.Truncate,消除\nm.width/contentWidth/scrollContentWidth 三宽度不一致导致的滚动残留。",
          "is_bot": false,
          "headline": "fix(ui): 移除 renderDiffBlock 全宽 pad 统一宽度",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T15:28:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53622e9d4a1e79ec1ce2b960ecc7a4596f807fff",
          "body": "上一 commit 误删末尾 \\n 致多 hunk 粘连,恢复 buf.String() 并修正测试断言。",
          "is_bot": false,
          "headline": "fix(ui): 恢复 renderDiffHunkFlat 末尾换行",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T15:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a88302aaf89ce879153c135cf2fa2dc7544ac207",
          "body": "flat 版同步修复 R1/R2,不加硬截断(消息文本流跟随终端软折行)。",
          "is_bot": false,
          "headline": "fix(ui): renderDiffHunkFlat 保留空行并剥离回车",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T15:20:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a01d0c5d3fa189a644104edcee4891c22a4626aa",
          "body": "R4: 超长代码行按显示宽度截断到 maxWidth,末尾加 …,修复长行\n无提示且避免折行破坏行映射。",
          "is_bot": false,
          "headline": "fix(ui): diff 长行硬截断并加 … 提示",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T11:52:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf1cf24d9cafbbc002e8f59ce52639e76a82efdf",
          "body": "R4: 超长代码行按显示宽度截断到 maxWidth,末尾加 …,修复长行\n无提示且避免折行破坏行映射。",
          "is_bot": false,
          "headline": "fix(ui): diff 长行硬截断并加 … 提示",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T11:36:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d19b8b13b1c7eefeddd82f585bb7ddad9564743e",
          "body": "R1: 空行改为占位渲染,保持屏幕行==数据行,修复选错行/滚动错位。\nR2: TrimRight 剥离 \\r,修复回车致下行渲染到上行。",
          "is_bot": false,
          "headline": "fix(ui): diff hunk 保留空行并剥离回车",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T11:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26117b8422e102be5e14f4d1f31af1e9488f91a6",
          "body": "按 lipgloss.Width 逐 rune 截断,保留 ANSI 转义序列边界,为 diff\n长行硬截断做准备。",
          "is_bot": false,
          "headline": "feat(ui): 新增 truncateVisual 按显示宽度截断辅助函数",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T02:33:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c9f4d0b04beface962b2e21d8e4c2b21ebcd953",
          "body": "按 TDD 拆分为 7 个任务:truncateVisual 辅助函数、renderDiffHunkBlock\n修 R1/R2、R4 长行截断、renderDiffHunkFlat 修 R1/R2、renderDiffBlock\n移除 padLine 修 R3、选区回归测试、全量验证。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): 新增 diff 纯文本展示修复实现计划",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T02:24:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5246a22c3a1fdf1b8d9da35a86ac6b65c4bfab53",
          "body": "诊断 diff 区域选错行/滚动错位/花屏三个症状的根因:空行被\ncontinue 丢弃致屏幕行≠数据行、未剥离 \\r 致回车覆盖、pad\n宽度不一致致滚动残留、长行无截断提示。方案保留自研选区与\n单层前景色,移除 padLine 统一宽度,新增 truncateVisual。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): 新增 diff 纯文本展示修复设计规格",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T01:57:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "19c3ca3c490b6161b76d3fdd19c47696f746a978",
          "body": null,
          "is_bot": false,
          "headline": "fix: 修正 go report card 和 LICENSE badge 的仓库链接",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:54:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6f5765b7b6d789a2a5e7042f2fd56500bb5496d",
          "body": null,
          "is_bot": false,
          "headline": "docs: 移除 README 中 30 秒验证章节和内置技能系统说明",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:51:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3c0675645e73a75651cfe88332b4b500f579690",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump to v1.0.1",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:44:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2cdf71ff51a2474645fa7793db1b890b67d621b",
          "body": "Dev",
          "is_bot": false,
          "headline": "Merge pull request #3 from hxs996-beep/dev",
          "author_name": "hxssss",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:36:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcffa3038a4a1f9c64eaa6d22565a8be746606a2",
          "body": "Feat/agent teams",
          "is_bot": false,
          "headline": "Merge pull request #2 from hxs996-beep/feat/agent-teams",
          "author_name": "hxssss",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:36:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef65eacfe9011bbbba4e609332609245f51086d3",
          "body": "Add a system-prompt note (zh/en) asking the model to maximize per-turn\nparallelism during investigation: emit all independent files/symbols/\nkeywords the current step needs as parallel tool calls in one response\n(aim for 5+) rather than issuing 2-3 and stopping. Fewer round-trips\nper conclusion, which matters more on high-latency endpoints.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): guide higher per-turn parallelism during investigation",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:34:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad7c870c1ed7582a9d6cf5731e1a4d3afa0567e8",
          "body": "Reword grep and read tool descriptions to encourage grep-first cross-\nfile exploration (find all occurrences / call sites / flows) and reading\nonly the relevant range via offset/limit, rather than reading whole\nfiles one by one. Reduces redundant full-file reads and wasted turns.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(tools): steer model to grep-first exploration in tool descriptions",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:34:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "44fa18235be69eecdda42b830b9a8d76ef0fdbc7",
          "body": "summarizeArgs now annotates read calls so the UI can distinguish a full-\nfile read from a targeted one: \"path (全文)\" for full reads,\n\"path (symbol:Run)\" for symbol reads, \"path (L52-101)\" for offset/limit\nranges. Without this every read rendered as a bare path, making repeated\nfull-file reads (a loop symptom) indistinguishable from targeted reads.\nUpdate summarizeargs tests to cover the new annotations.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): annotate read scope in tool-call summaries",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:34:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3db2a562170c7f6ebb91561c81b331f44958e2db",
          "body": "When a handoff sub-agent is cancelled (BlockedBy=\"cancelled\"), don't\nappend its digest as a tool message to history — the result is empty/\nincomplete and would feed stale context to the next turn. Mark the\nToolResult status as \"cancelled\" in both the main engine and\nSubAgentRunner so the caller can distinguish it from a normal \"ok\"\ncompletion.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(engine): skip tool messages for cancelled handoff results",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:33:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7ae65ada66596109dfe988806bdee5a4a2d4b9af",
          "body": "Add a RetryProgress field to the streaming Chunk so the retry layer can\nnotify the caller when a retry is about to start (e.g. \"Retrying 1/3\nafter 2s...\"). Propagate it through llm.Chunk -> engine.ModelChunk ->\nadapter, and emit a \"retry\" ProgressEvent in executeTurn so the UI can\nshow retry state in real time instead of silently waiting.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(llm): surface retry progress to UI via RetryProgress chunk field",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:32:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "879e4e5c3c04b4c90752fb78068482ed1834e358",
          "body": "The HTTP client used Timeout:0 with no per-phase bounds, so a stalled\nAPI connection (server accepts TCP but never responds, or stream goes\nsilent mid-response) hung the agent indefinitely — the process stayed\nalive with no log output and a frozen UI for hours.\n\nAdd layered timeouts that bound stall\n[…]\nhich is a hard deadline and not retried) with status=0,\nso the retry layer treats them as transient and re-attempts instead\nof surfacing a hang.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(llm): add streaming idle/dial/header timeouts to prevent hangs",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:31:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "11527305af39ed924d8d4ed714a0eff10f510414",
          "body": "…text\n\nresolveSafePath previously confined all file operations to the launch\ndirectory, rejecting any path outside it with \"escapes workspace\". For an\nAI coding agent that must read/edit files across multiple projects, this\nsilently broke edit/write/glob/grep whenever the target was a sibling or\nabs\n[…]\nnd leave\nresidue while scrolling. Plain text + full-width padding behaves like\nordinary message rows, so scrolling and selection are now stable.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tools): allow agent to operate on any path; render diff as plain …",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:30:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6502d74d77a9ff670bcddf6ed4ab571682182c09",
          "body": "Establish a \"locate then read\" protocol via prompt-only changes to curb\nthe agent re-reading whole files during exploration (observed: 8 full\nreads of llm/deepseek.go in one task despite LSP giving exact line\nnumbers). Adds explicit guidance to grep/lsp-locate before reading a\nrange, and repositions grep as the primary cross-file exploration tool.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(engine): add design spec for locate-then-read prompt protocol",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-28T14:55:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 9,
      "commits_last_year": 161,
      "latest_release_at": "2026-07-19T00:13:39Z",
      "latest_release_tag": "v1.0.3",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 8,
      "days_since_latest_release": 7,
      "mean_days_between_releases": 6.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 0,
      "stars": 4,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": 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": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 91578,
      "source_files_sampled": 147,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/BurntSushi/toml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/charmbracelet/bubbletea",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.4"
        },
        {
          "name": "github.com/charmbracelet/glamour",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.0"
        },
        {
          "name": "github.com/charmbracelet/lipgloss",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.1-0.20250404203927-76690c660834"
        },
        {
          "name": "github.com/charmbracelet/x/ansi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.10.2"
        },
        {
          "name": "github.com/ebitengine/purego",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.10.1"
        },
        {
          "name": "github.com/muesli/reflow",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.3.0"
        },
        {
          "name": "github.com/muesli/termenv",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.16.0"
        },
        {
          "name": "github.com/sergi/go-diff",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.1"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.1"
        },
        {
          "name": "golang.org/x/net",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.38.0"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.17.0"
        },
        {
          "name": "golang.org/x/text",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.30.0"
        },
        {
          "name": "golang.org/x/time",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.9.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 3,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "hxs996-beep",
          "commits": 141,
          "avatar_url": "https://avatars.githubusercontent.com/u/229309945?v=4"
        },
        {
          "type": "User",
          "login": "imjok00",
          "commits": 20,
          "avatar_url": "https://avatars.githubusercontent.com/u/38679813?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.876
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "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": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "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": null,
            "reason": "no dependencies found",
            "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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "13 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "ed3e104d14fb2583526e97e2b2edab7a20f6ff3b",
        "ran_at": "2026-07-26T07:11:49Z",
        "aggregate_score": 1.4,
        "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": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-06-29T11:36:53Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/hxs996-beep/deepAct",
    "host": "github.com",
    "name": "deepAct",
    "owner": "hxs996-beep"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 42,
      "inputs": {
        "security": 14,
        "vitality": 72,
        "community": 28,
        "governance": 35,
        "engineering": 52
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 72,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "commits_last_year": 161,
              "human_commit_share": 1,
              "days_since_last_push": 6,
              "active_weeks_last_year": 8
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "8/52 weeks with commits",
                "points": 5.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "161 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 161
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 9,
              "latest_release_tag": "v1.0.3",
              "releases_from_tags": false,
              "days_since_latest_release": 7,
              "mean_days_between_releases": 6.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "9 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~6.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 6.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 28,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 8,
            "inputs": {
              "forks": 0,
              "stars": 4,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "4 stars",
                "points": 7.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 35,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.876
            },
            "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 88% of commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 88
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 3,
              "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": "3/3 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 3,
                      "decided": 3
                    }
                  }
                ],
                "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": 18,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "hxs996-beep",
              "public_repos": 1,
              "account_age_days": 330
            },
            "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 hxs996-beep",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "hxs996-beep"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~0 yr old",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 52,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "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": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "ai-coding-assistant",
                "code-agent",
                "code-agent-harness",
                "deepseek-tui",
                "deepseek-v4",
                "golang",
                "vibecoding",
                "harness",
                "deepseek-harness"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "9 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 14,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 14,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 1.4
            },
            "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "13 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 69,
        "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": 0.93,
              "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": "93 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 93,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.22,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "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": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "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": "22 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 22,
                      "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 91578,
              "source_files_sampled": 147,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/147 source files over 60KB",
                "points": 54.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 147,
                      "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch go package 'github.com/deepact/deepact' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T07:11:54.153559Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hxs996-beep/deepAct.svg",
  "full_name": "hxs996-beep/deepAct",
  "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 agregadas.