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

ProjAnvil / Jiade

Seeds runnable microcosms of real-world industry systems

GoMIT★ 0 estrellas⑂ 0 forksdesde jul 2026Ver en GitHub ↗

ProjAnvil/Jiade tiene un índice de salud de 46 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (74/100) y la más baja, Security (22/100). Se actualizó por última vez hace 4 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

46
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

ProjAnvilOrganización
1 seguidor11 repositorios públicosdesde nov 2025

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/projanvil/jiadev0.3.0-4hace 4 días

Métricas por categoría

Vitalidad

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

74Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 4 días
2.1/36Cadencia de commits — 3/52 semanas con commits
18/18Volumen de commits — 146 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_year146
human_commit_share1
days_since_last_push4
active_weeks_last_year3
Cómo se puntúa
27/27Publica versiones — 4 versiones publicadas
36/36Recencia de las versiones — última versión hace 4 días
27/27Cadencia de publicación — una versión cada ~2,5 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count4
latest_release_tagv0.3.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases2,5
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

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

Sostenibilidad y Gobernanza

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

32En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
2.2/25Alcance del propietario — 1 seguidores de ProjAnvil
9.2/25Trayectoria — 11 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers1
owner_typeOrganization
is_verified
owner_loginProjAnvil
public_repos11
account_age_days245
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 4 días
12/20Historial de versiones — 4 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/projanvil/jiade
ecosystemsgo
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

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

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

Documentación

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 — 4 topics
10/10Wiki
Datos de entrada utilizados
topicsdata-seeding, docker, golang, microservice
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?

22Crí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/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 29 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate2,2
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, packaging, signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

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

65Moderado · 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 — 97 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,97
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, templates/bank/Makefile, templates/commerce/Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 52 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_filesMakefile, templates/bank/Makefile, templates/commerce/Makefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,52
toolchain_manifestsgo.mod, templates/bank/go.mod, templates/commerce/go.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/235 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes58.683
source_files_sampled235
oversized_source_files0

Datos clave

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

Advertencias de recopilación de datos

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 2.2 / 10
2.2agregado

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-29 02:35 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities29 existing vulnerabilities detected
Dependencias directas 3
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/manifoldco/promptuiv0.9.0go.mod
Gogithub.com/spf13/cobrav1.8.1go.mod
Gogopkg.in/yaml.v3v3.0.1go.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": [
        "data-seeding",
        "docker",
        "golang",
        "microservice"
      ],
      "is_fork": false,
      "size_kb": 11974,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1260938,
        "Shell": 17137,
        "PLpgSQL": 8083,
        "Makefile": 6127,
        "Dockerfile": 2620
      },
      "pushed_at": "2026-07-24T18:18:55Z",
      "created_at": "2026-07-14T15:07:13Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T18:19:02Z",
      "description": "Seeds runnable microcosms of real-world industry systems",
      "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": null,
      "type": "Organization",
      "login": "ProjAnvil",
      "company": null,
      "location": null,
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/246036869?v=4",
      "created_at": "2025-11-25T08:15:19Z",
      "is_verified": null,
      "public_repos": 11,
      "account_age_days": 245
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-07-24T18:19:04Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-07-23T16:24:05Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-07-20T13:54:16Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-17T06:33:19Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "3deb3ff8a9e993cbc933a4b3567f0d6ce579d43c",
          "body": "…nto template docs\n\n- Root README (en + zh): replace bank-specific service tables and data-engine\n  notes with a template table that links each template's own README/ARCHITECTURE;\n  generalize quickstart and how-it-works wording.\n- templates/bank/README.md: absorb the bank service table (with a \"con\n[…]\nd out of the root README; add back-links to root jiade and ARCHITECTURE.md.\n- Reflects commerce now being a first-class shipped template alongside bank.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: make root README a multi-template overview, sink bank details i…",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T18:18:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3a196c747418d4c036d40ddcb2fec4a6f0ae75f2",
          "body": "Rebuild templates.tar to include the Traefik discovery fix, legacy catalog\npricing, seed location_profile + refund-on-captured fixes, and the aligned\nsmoke script. Parity verified: jiade init output matches templates/commerce.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(commerce): repackage template after smoke/saga runtime fixes",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T15:12:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fdeef58d1c987f17d4a6accc5f9ac8d58d0c92bf",
          "body": "Gate 2 (checkout) returned 422 invalid_order after the order service's\ndurable checkout reached phase=prepared with failure_code=retryable. Root\ncause: the inventory reservation store gates every candidate level on\nlocation_profile.fulfills_orders, but the seed generated location and\ninventory_level\n[…]\nd, expected_version,\nIdempotency-Key, strict webhook body, payment_intent_id response).\n\nAll 6 smoke gates now pass against the live topology (seed=42).\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(commerce): complete smoke checkout gate and legacy catalog pricing",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T15:11:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "330789d6226f5877a15367d05ff046892f095276",
          "body": "Root cause of the gateway 404 (previously mis-attributed to the OrbStack\n#2405 API-version bug, which only affects Traefik v2.10): the Traefik\ncommand passed --configFile AND repeated the docker provider flags on the\nCLI. Defining the same provider in both places left the docker provider\nenumerating\n[…]\nut API contracts (item-add body\nshape, etc.) — tracked separately; the Task 9 smoke was authored without\nruntime access while Traefik was misconfigured.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(commerce): make Traefik discovery work and replicas distinguishable",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T14:48:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "45de8da0bffe691afa4e5bd6afb15ab3534e6b57",
          "body": "Surfaces the pre-existing Task 5/6 gap that blocked the order saga happy\npath end-to-end, verified by the whole-branch review:\n\n1. Order's ReservationAllocation declared only 4 fields (reservation_id,\n   sku, quantity, status) while inventory emits 7 (adds order_id,\n   location_id, expires_at). Orde\n[…]\nerts order's\n   decodeOrderResult accepts it. The test fails (RED:\n   unknown field \"order_id\") before the struct expansion and passes\n   (GREEN) after.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(commerce): close inventory saga commit/release loop",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T14:13:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c91afab4f11d71c863b9d667ee8dae801d84e42",
          "body": "Rebuild internal/template/templates.tar to include the completed commerce\ntemplate (Tasks 7-10: payment+fulfillment event workflows, deterministic\nseed + verifier, scalable compose topology, k8s + docs). The generator\n(gen.go) now tars bank + commerce; root Makefile/READMEs document the\nmulti-templa\n[…]\ngenerated-project\nacceptance (`make up && make smoke`) is environment-blocked (OrbStack+\nTraefik interop) and deferred to a standard Docker Engine host.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build: package scalable commerce template",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T13:49:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e8c5761d531891bf0d8d57b846eb95937b605f25",
          "body": "Adds the Kubernetes equivalents of the compose topology and rewrites the\ncommerce template README and ARCHITECTURE docs.\n\n- deploy/k8s/: namespace, ConfigMaps (shared + per-service), dev-only Secret\n  (labeled unsafe), six Deployments mirroring compose replicas/resources/\n  probes, ClusterIP Service\n[…]\n StatefulSets; the manifests explicitly do not claim HA for\neither. The included Secret is labeled dev-only and must be replaced before\nany non-dev use.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(commerce): document deployment and operations",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T13:39:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "060e1fa04fe525761ee6ccb8135d699bbfb12bab",
          "body": "Gates 3/5/6 of test/smoke.sh were no-ops that only checked endpoint\nreachability and used a synthetic failing-${SEED_INT} order id the seed\nnever creates. A green make smoke would have falsely signalled acceptance.\n\n- gate_payment_failure: discover a seeded order with payment_status=failed\n  via GET\n[…]\nk returns\n404). Verified via bash -n test/smoke.sh and docker compose config\n--quiet for compose.yaml, the observability overlay, and compose.load.yaml.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(commerce): make smoke gates assert real outcomes",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T13:29:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "46f286f9919dd6e0495ce445e65b8f461bf35aea",
          "body": "The seed generator emitted payment_intent rows in their terminal 'refunded'\nstatus and then wrote the refund row, but the PostgreSQL validate_refund\ntrigger (payment_db.sql:119-121) accepts a refund only while the intent\nstatus is 'succeeded' or 'partially_refunded'. The trigger rejected every\nfully\n[…]\ndedIntent\nto pin the trigger-safe shape. Verified against an isolated PostgreSQL 16\ncontainer: seed exits 0 and live verify passes; container torn down.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(commerce): seed refunds only on captured intents",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T13:19:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "265f58b733ea5060e85b02a14c385f66ec7cac95",
          "body": "Production-shaped local topology for the commerce template: 6 Go services\nbehind Traefik 3 (host port 18100 only), each with its own PostgreSQL 16\ncontainer and volume, RabbitMQ 4 with pre-declared commerce.events exchange\nand per-service queues/retry(TTL 2000ms, DLX back)/dlq, pinned Go builder +\nn\n[…]\nse A gates (all pass): docker compose config --quiet for compose.yaml,\ncompose.observability.yaml, compose.load.yaml; bash -n test/smoke.sh;\nmake -n up.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(commerce): add scalable compose topology",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T13:10:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b24e7ad497a9e6fd60fde1b619549dfa69e4de72",
          "body": "Implements the seed package and CLI for Task 8: deterministic,\nreproducible data across all six commerce databases plus an in-memory\nintegrity verifier.\n\n- internal/seed: per-domain generators (catalog, customers, inventory,\n  orders, payments, fulfillment) with separate FNV-seeded random streams\n  \n[…]\n output (80 products, 100 orders).\n\nTests: +21 new (9 seed/verify, 5 constraint audit, 4 streaming, 3 CLI).\nFull module green: 281 passed, go vet clean.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(commerce): generate realistic deterministic data",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T12:43:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fb88113d47cfd920fededcc2cce6f3ff7e16a16c",
          "body": "PostgresStore.SaveCancel keyed its emit predicate on len(cancelled) > 0\n(rows actually flipped open->cancelled). When every fulfillment_order for\nthe order was already terminal (fulfilled), the UPDATE matched zero rows,\nRETURNING was empty, and no fulfillment.cancelled.v1 outbox row was\nwritten. The\n[…]\nntEvenWhenAlreadyFulfilled and\n  TestPostgresCancelEmitsNothingForOrderWithNoProjection, both gated\n  behind TEST_DATABASE_URL + //go:build integration.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(commerce): always emit fulfillment cancelled event for saga",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T12:17:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "68ea608fad6a1224b2c9d898cbdc6b30dc659683",
          "body": "Implement the fulfillment domain that the order saga (Task 6) consumes:\nsplit a paid order's reserved lines by location_id into one\nfulfillment_order per location, create items/picks/packages and a\nshipment per order, advance the projection to delivered, and emit\nfulfillment.completed.v1 (or fulfill\n[…]\norder_id\"} (order decodes with\n  DisallowUnknownFields)\n- Integration tests behind TEST_DATABASE_URL (skip without it; verified\n  against PostgreSQL 16)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(commerce): add fulfillment workflow",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T12:04:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "334b5a9906068401f7a84b8bd6159a7931e7b807",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(commerce): align payment consumer with order events",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T11:46:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d2201542958e1dc9a9783e0fe51ec01a8cf2363c",
          "body": "Implement the payment domain service that order (Task 6) consumes. Built on\nthe pre-existing state machine and payment_db.sql schema (no migrations).\n\n- provider.go: deterministic Provider + Simulator; scenario-driven outcomes\n  (provider_timeout_then_success → 1 transient + success; hard declines\n \n[…]\n, duplicate refund replay.\ngo test ./... and go vet ./... clean. Integration tests (//go:build\nintegration) gated on TEST_DATABASE_URL, skip without it.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(commerce): add payment workflow",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T11:35:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5a8f92c078237ce5f30fa86c1147e18b69af30c4",
          "body": "Locks interface contracts (event envelope + strict payload shapes order\ndecodes, wiring pattern, exchange topology), file map, sequencing\n(Task 7 payment+fulfillment parallelized; 8->9->10->11 sequential), and\nphase-A/phase-B verification gates for completing the production\ntopology. References the parent spec section-by-section for code detail.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(commerce): add Task 7-11 execution plan",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T11:13:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c94fd7235c3585a09243c609721feeacc142df83",
          "body": "The lib/pq + database/sql scaffolding (internal/platform/app and the\ncmd/payment, cmd/fulfillment, cmd/seed stubs) is removed ahead of the\nproduction-topology implementation, which uses pgx/v5 exclusively.\ngo mod tidy drops the now-unused dependency.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(commerce): drop unused lib/pq dependency",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T11:02:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1252db8d3ad1bd727f24445d00d6914837cec69f",
          "body": "Task 6 remediation after adversarial review of the checkout saga.\nMakes order checkout, cancellation, saga consumption, retry routing,\nand API idempotency durable under crashes and concurrency while\npreserving the seeded table arities.\n\n- Claim checkout idempotency before dependency calls; reload im\n[…]\nses skip precisely when\ntheir URLs are unset. go vet and git diff --check clean.\n\nPlan: docs/superpowers/plans/2026-07-24-commerce-task-6-remediation.md\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(commerce): harden checkout saga durability and idempotency",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T10:50:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fb27cb130ad75f4a5afde33cd5fcfe7b7a400564",
          "body": null,
          "is_bot": false,
          "headline": "feat(commerce): implement checkout saga",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T09:23:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea046a030e602af005ba079e94f254dbe64ef5f0",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): preserve terminal reservation replays",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T08:41:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "817fc7bafa5bc8ba3c72392ddb8a072ea478d5a0",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): canonicalize service timestamps",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T08:30:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "466b96889a9aef0d58807ba3ca89108d73cf5637",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): fence terminal inventory orders",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T08:26:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "329ca11d703147e4f1fbcd888943662791be3894",
          "body": null,
          "is_bot": false,
          "headline": "feat(commerce): implement catalog customer inventory services",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T08:05:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67c9384ebe2477fe435d24c113fd6cae8ced850e",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): make payment states monotonic",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T06:13:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c8fc4452c32076ca702f1595954ef891a969911",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): protect payment financial state",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T05:18:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12a294deef2a2b918473511921891fff73b1a4d7",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): enforce domain schema invariants",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T05:05:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82831e3d06c35140c82e5cab5167c8b2fe3fbec1",
          "body": null,
          "is_bot": false,
          "headline": "feat(commerce): model realistic commerce domains",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T03:55:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05e5c014b8a77e9052c411ca07f4cf616a3294e8",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): stop relay on publisher loss",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T03:20:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "209e22913a13fdbe54957cb2f2b1cf0e358b52e0",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): preserve rabbit publish correlation",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T03:14:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b56cf4e7278a64ceb8cc32a17a0d0b9eda2a80d",
          "body": null,
          "is_bot": false,
          "headline": "feat(commerce): add reliable event delivery",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T03:05:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "166f92836b722086e670e5c3e197f1f2ef4ab1b2",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): release rejected client requests",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T02:45:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84aed90d06346020a754ab55c9a908a526cfb28f",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): harden resilient client retries",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T02:38:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7caa7ceb91b87718914f67b2f1038c0204f120c3",
          "body": null,
          "is_bot": false,
          "headline": "feat(commerce): add resilient service client",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-24T02:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "021e57506df3e7b54ef7ab2b9278cfc547834f3c",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): preserve HTTP writer capabilities",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-23T18:28:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ab48d8c8e4bd24f70d15aaa4ffc0900336543c2",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): preserve HTTP response streaming",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-23T18:12:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd368c43c9bc2aea05ccebebe171d591da635329",
          "body": null,
          "is_bot": false,
          "headline": "fix(commerce): harden HTTP platform observability",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-23T18:06:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db71109f4703fc7d3fbf26a51d23415f70838f5e",
          "body": null,
          "is_bot": false,
          "headline": "feat(commerce): add production HTTP platform",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-23T18:00:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c5aeab5a73f61cef41c5249c7816ef20feef0a9",
          "body": null,
          "is_bot": false,
          "headline": "docs: plan commerce production topology",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-23T17:36:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "735dbecb153020567b2bee5eb86cce30e4a5a7f5",
          "body": null,
          "is_bot": false,
          "headline": "docs: design production-shaped commerce topology",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-23T17:31:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9917f3586e990f8200f1bd662c22e64141460d2",
          "body": null,
          "is_bot": false,
          "headline": "refactor(bank): replace FDW and standardize English output",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-23T16:22:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05e4330b7a595fb7ad4ef424c34fee942adee347",
          "body": "86367a3 把服务端口 808x→1808x、postgres 宿主机 5432→15432,但漏改了\n根目录 Makefile 与两份 README,导致 make e2e 的 healthz curl 打\nlocalhost:8080(容器实际监听 18080)→ curl exit 7,CI 失败。\n\n- Makefile:e2e 中 7 处 localhost:808x → 1808x(CI 失败的直接修复)\n- README.md / README.zh-CN.md:端口表 7 行 + curl 示例 + 5432→15432\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): e2e Makefile 端口 808x→1808x(漏改自 86367a3)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-20T13:44:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "128dd4a1df3aa93ee5340ffa72857ebd38c236f5",
          "body": "Replace user-facing strings, error messages, flag help, and code\ncomments across internal/cli and the internal/ui package doc.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style: replace code and comment language with English",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-20T13:09:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "86367a371854145294dd282900dc5422e5b9fa7f",
          "body": "避让 8080 等高频冲突端口段,容器内外统一到 1808x。同步:template.yaml、\n7 个 cmd/*/main.go 默认值、compose API_PORT 与 ports、manifest_test 断言、\nREADME/ARCHITECTURE。postgres 宿主机映射改 15432:5432,pg.go 宿主机默认\nDB_PORT=15432;容器内 DB_PORT 与 fdw 进程内端口保持 5432(语义不变)。\n重打 templates.tar。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(bank): 服务端口 808x→1808x、postgres 宿主机 5432→15432",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-20T12:55:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9b75a27711b2494ec7a473cb79eb62325a39b8db",
          "body": "jiade up/down/seed 原本 --dir 为空就报错,与 README 用法和 init 完成提示\n(cd <dir> && jiade up && jiade seed)矛盾。改为空时默认当前目录 '.';\ninit 保持交互式 prompt(创建新工程的语义不同)。同步更新 --dir help 文本。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(cli): up/down/seed 默认当前目录,不再强制 --dir",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-20T12:55:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d679d61a16961ce89d33d768a58644ac3ced1d0c",
          "body": null,
          "is_bot": false,
          "headline": "docs: 移除内部代号引用(开源净化)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-17T06:28:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9764048a175fd0a108ceeec1ff48c1ccdeeda50",
          "body": null,
          "is_bot": false,
          "headline": "docs: open-source prep——MIT LICENSE + 中英双语 README(互链)+ 清理个人路径",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-17T05:57:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98e46f2d2e64d54ad55441bd8db039a5f45f3a29",
          "body": null,
          "is_bot": false,
          "headline": "Merge B-4b: loan + wealth 服务(spec §B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-17T05:36:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5a21445f454d174fa863c5f33583b5c71c06412",
          "body": "…系收尾)",
          "is_bot": false,
          "headline": "chore(bank): Spec B 收口——Makefile 全服务/串行集成、gitignore、文档刷 7 服务、测试修复 (B …",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-17T05:26:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ace2ac635010085e370b19b1a7815d19f87ac98",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): B-4b template.yaml + compose 加 loan/wealth(:8085/:8086),重打包",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T19:25:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19ff1d13fae931b8e84eb0d6b056aa691fa65ca4",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): seed 编排接入 loan/wealth(8→10 步,7 库) (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T19:03:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b660b87d36bba92b2960b942a602ffe559d2944c",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): wealth service+api+cmd 四层纵切 (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:55:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92c40979688bb31db69962e6f3e4100cc7987a46",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): loan service+api+cmd 四层纵切 (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:50:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ccb310c94ffec021d3c367f1f665bde809db548",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): wealth repo——本库查询 + FDW 联邦 JOIN (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:45:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e41a2a240641e6f60f50609855a8c14f1e8eb6d8",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): loan repo——本库查询 + FDW 联邦 JOIN (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:41:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd2ad101b69544b581445710807be58b29c56c86",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): wealth fixture 生成器——NAV 滚存 + 三因子订单 + 每日利息 (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:37:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "539a2c7eead3beff0b591d13fd32c333ac7e45ab",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): loan fixture 生成器——静态 + 逐日滚存/逾期滑落 (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:33:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "305b5e85ae248d76b9d7fdb588714698a18e8f9c",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): wealth domain——Money 副本 + 5 表模型 (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac9db81c81aef99a191d2e5c711deff0925ae6b2",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): loan domain——Money 副本 + 6 表模型 (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:24:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a96e4c21c79297afbaec16058eeb4c612d513631",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): B-4b 共享基建——loan/wealth 词库 + addMonths + FDW Mappings",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:19:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20e1add2147901253079121d17af84b0a0dbd7c6",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): add loan_db + wealth_db schemas (B-4b)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:10:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d00b7f7c9b0d59ddd05f78fbd84f5f1f4776059",
          "body": null,
          "is_bot": false,
          "headline": "docs(bank): B-4b 实施计划——loan+wealth 纵切 12 任务",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T18:05:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3d552e9e69c594eb939006197fb801a5df4d416",
          "body": "brainstorming 产出。复制 B-1/B-4a 模式扩 loan(:8085)/wealth(:8086) 两服务:\n- loan=逐日全量摊销(loan_balance 每日快照 + 月度 repay + 逾期五级分类滑落,确定性,无三因子)\n- wealth=混合(wealth_nav 每日净值游走全量快照 + wealth_order 三因子事件流 + wealth_income 每日利息)\n多库 5→7、FDW +2、seed 8→10 步、template/compose/manifest 扩展。\nrng +40/+41(loan) +50/+51(wealth);金额 Money,rate/nav/share 文本直存。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(bank): B-4b 设计文档——loan+wealth 纵切(逐日滚存)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T17:24:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1b65e62dc25967987e4c7899732c83f187190826",
          "body": "复制 B-1 多库+FDW+四层只读模式新增 reward(:8083)/risk(:8084) 两服务,事件表\n(points_txn/coupon、risk_event)逐日生成复用 B-2 distribution 三因子;reward 自带\nint64 分 Money、risk 无金额;两服务各加 1 FDW←cust_info 联邦端点。顺带修 B-1 起\n遗留的 seed_test CWD 问题 + payment/risk repo 的 date>=text SQL 类型 bug。\n\n13 commits(12 plan 任务 + T11 CWD fix + final-review fix);fable final review\nReady-to-merge,fix 已落地。bank build/unit(104)/integration(129) + jiade 根(10) 全绿。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge B-4a: reward + risk 服务(spec §B-4a)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T16:46:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "602bcec6c260a8f520d7ba58faf9acbe18905f65",
          "body": "…+ fdw 文档\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(bank): B-4a final-review fixes——risk summary/rule 一致 + repo 错误包装 …",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T16:42:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9737b96cee79888f43d3911aada6bb18fbba4b2a",
          "body": "- template.yaml: 5 dbs(+reward_db/risk_db)+ 5 svcs(+reward:8083/risk:8084),version 0.3.0\n- docker-compose.yaml: 追加 reward/risk service blocks(build.args.CMD,mirror customer/payment)\n- templates.tar 重打包(298KB→384KB)\n- 修复 risk_repo/payment_repo ListEvents/ListTransfers 的 date >= text SQL operator error\n  (NULLIF($1,'')::date 替代 $1='' OR biz_date>=$1;payment 是 B-1 遗留同模式 bug)\n- manifest_test 断言更新 3→5 svc / 3→5 db\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-4a template.yaml + compose 加 reward/risk(:8083/:8084),重打包",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T16:30:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "559fa8a0f1a24aa7ed915612868a2d85f5ac5220",
          "body": "runSeed 用相对模块根的路径读 db/migrations/*.sql,而 go test 把 CWD\n设为包目录 cmd/seed/,导致直接 go test 失败。新增 TestMain 用\nruntime.Caller 定位模块根并 chdir,使 `go test -tags=integration\n./cmd/seed/` 无需 -exec 包装即可运行。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(bank): seed_test chdir 到模块根,使集成测试可直接 go test 运行",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T15:35:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "35cda5e8bf7c0006c7bd8295f972835a43ba6fe8",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-4a seed 接入 reward + risk(8 步编排,逐日三因子)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T15:25:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "726226ee0bcc42a350653e7080552fd5cbb9d505",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): risk service + api + cmd (read-only, :8084)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T15:13:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "89c456c5f0f3848635a0673c81e575c646453af2",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): risk repo with FDW cross-db join (event detail)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T15:04:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10fdac462c52c285e80ce09115c5355ab3424577",
          "body": "- RiskStatic/GenRiskStatic: risk_rule(5 硬编码 R001-R005) + blacklist(n=max(2,20*sf)),rng 偏移 seed+32\n- WriteRiskStatic: 幂等先 DELETE 后 INSERT(blacklist/risk_rule)\n- RunRisk: 逐日三因子 factor,n=max(0,int(5*sf*factor)),每日独立 rng seed+33+ordinal;\n  event_id/txn_ref 确定性 ID(RS-EV-/RS-TX-<dateCompact>-<seq>),risk_s\n[…]\n回 \"\")\n- 复用同包 maxInt/minInt(reward.go)、nullable/placeholders/bizDateBatchSize(core.go/bizdate.go)\n- 纯单测 2 例(Deterministic + ScaleBlacklist),无 postgres 依赖\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): risk fixture 生成器(静态 + 逐日三因子 risk_event)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T14:52:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7f287090af8383fd9d92a56390ddc0c119a1811f",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): risk domain model (no money; score/threshold as text)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T14:43:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3edb07acba4f24843d42fe886baf9bdbc1a1972b",
          "body": "新增 reward 只读服务的用例层 + 传输层 + 进程入口,补齐 B-4a reward 的\nservice/api/cmd 三层。仿 customer/payment 既有模式。\n\n- service/reward_service.go: RewardStore 接口(与 repo 方法对齐)+\n  RewardService 包装,纯查询编排。\n- api/handlers.go + router.go: chi 路由,writeJSON/errMap 通用 helper;\n  GetPointsAcct/GetProfile 将 sql.ErrNoRows 映射为 404;coupo\n[…]\n验证:\n  go test ./internal/reward/...  → 全 PASS(4 handler 单测)\n  go build ./cmd/reward          → 成功\n  go vet ./internal/reward/... ./cmd/reward/...  → 无问题\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): reward service + api + cmd (read-only, :8083)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T14:36:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce0da34573592709d7faa39092fb98197a24de62",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): reward repo with FDW cross-db join (reward profile)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T14:26:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aad397095e9493158a68b2b29e09830fbe10f07e",
          "body": "- GenRewardStatic 生成 member_level/campaign/points_acct(rng +30)\n- WriteRewardStatic 幂等写三张静态表\n- RunReward 逐日三因子生成 points_txn + coupon(每日 rng seed+31+ordinal,\n  余额内存滚存 redeem 不超余额,5% 发券)\n- bizdate.go 补 parseDate2 供 addDays 使用\n- 纯单测覆盖确定性与规模缩放\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): reward fixture 生成器(静态 + 逐日三因子 points_txn/coupon)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T14:13:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "53a2717fe220931f89e8a21fa11b95fe4b263007",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): reward domain (int64 Money + points/coupon/campaign models)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T14:04:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cee5f641d9d5b840f8a2d0d63b113553e10307b",
          "body": "…sk 映射\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-4a 共享基建——RNG Float64 + 词库 + ScaleFactor + FDW reward/ri…",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T13:55:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6cbec8e93af5265e9f1e2889f9b3c1dc90406b02",
          "body": null,
          "is_bot": false,
          "headline": "feat(bank): add reward_db + risk_db schemas (B-4a)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T13:35:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f898bd4a132a3b17e8ad04e2f82dd632e3fd784b",
          "body": "基于 B-4a spec 出可执行计划:Task 1-2 共享基建(schema + rng Float64/词库\n+ ScaleFactor + FDW 映射),Track R(reward domain/fixture/repo/service-api-cmd)\n与 Track K(risk 同结构)文件不相交可并行,Task 11-12 seed 编排 + 模板/重打包\n汇合。逐日三因子复用 bizdate.go 内核,reward 自带 int64 分 Money,risk 无金额。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(bank): B-4a reward+risk 实现计划(12 任务,R/K 双轨可并行)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T13:24:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "66ce6fde1a6cc08adf041a3e8b6d7d893ce7e0b0",
          "body": "Spec B-4 再分解为 B-4a(reward+risk,三因子事件流)与 B-4b(loan+wealth,\n逐日滚存)。本文档覆盖 B-4a:复制 B-1 多库+FDW+四层只读模式,复用 B-2\ndistribution 三因子做 reward/risk 事件表逐日生成;reward 自带 int64 分\nMoney、risk 无金额;两服务各加 1 联邦端点(risk 新增 risk_db←cust_info\n映射,bossy 原无)。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(bank): B-4a reward+risk 设计文档",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T12:46:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1dc1331a98765944ef54e860b9ab5378afe830cb",
          "body": "合并 Track A(引擎)+ Track B(B-3 衔接)后的模板打包。\nbank module: go build ./... ok, go test ./... 84 passed;\njiade: go build/test ok;B-2 集成(RunBizDate)真 pg 通过。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(bank): B-2 重打包 templates.tar",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T07:05:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b7ce8d55ac6bb21a389209a57f9d1107705faa33",
          "body": null,
          "is_bot": false,
          "headline": "Merge Track B: B-2 衔接 记账 biz_date 读 sys_param.biz_date",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T07:03:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fcc4881ad156e6e703d6c60a82f19c4b2cc0680",
          "body": null,
          "is_bot": false,
          "headline": "Merge Track A: B-2 多日切日引擎(三因子/GenDay/RunBizDate/seed 接入)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T07:03:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b46d4934bc7620325e06aeafbf20b42813a9fd85",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-2 seed 接入 RunBizDate,删除 Spec A 快照生成",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T06:58:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8422721daabea56f4a6c74eea9e06e5a851d0e94",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-2 RunBizDate 写入循环 + 批量 writer + 集成测试",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T06:47:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0c484f64dd26c2194a431da7ff602c0ddd3f9ff2",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-2 GenDay 内核 + DayState 滚存(纯)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T06:40:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0514a47445c98a916b448bdd785c3e6af551541",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-2 distribution 三因子 + 日期 helper(纯)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T06:33:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "37a455376629401e5d891ecf75e3c23b872b2a57",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-2 衔接 记账 biz_date 读 sys_param.biz_date(GetBizDate)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T06:27:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d3bf52dad2c05b13ca0e0bad5724d3ed8f6d32ad",
          "body": "Track A(引擎):T1 三因子 → T2 GenDay → T3 RunBizDate → T4 seed 接入。\nTrack B(B-3 衔接):T5 GetBizDate+txn_service。T6 重打包+全量验证。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(bank): B-2 多日切日引擎实现计划(6 任务,A/B 双轨可并行)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T06:16:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f826d2d97cf8cd901a780fe60fb5f11d804c07ef",
          "body": "移植 bossy bizdate+distribution,把 Spec A 一次性快照 core fixture\n换成逐日滚存引擎(408 日历日 + 三因子 + 全量逐日余额快照 + 切 sys_param)。\n方案 3:纯 GenDay 内核 + 薄 RunBizDate 写入循环;含 B-3 衔接(记账\nbiz_date 改读 sys_param.biz_date)。范围限定 core_db。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(bank): B-2 多日切日引擎设计文档",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T06:03:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "729cd553a886ee0b773ce3e653aa1b748b074039",
          "body": "README/ARCHITECTURE 从\"只读\"更新为含记账/冲正写接口(生成物自文档化);补 ReverseVoucher handler 测试(invalid mode 400 + blue 默认 200),闭合 final review §11#5 部分。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(bank): B-3 文档同步写端点 + ReverseVoucher handler 测试",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T04:44:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad64dfb6a0c5a67136094deffde3f216fa41d316",
          "body": "40P01→409、其他 SQLSTATE 不误判。闭合 re-review 唯一 Minor。Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(bank): B-3 statusFor 40P01→409 单测固定(spec §8.3 死锁兜底)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-16T04:31:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "475c7381b4807d5d4852bc699c03af7517f327e3",
          "body": "红冲不改 txn_status(spec §7.3),蓝冲的 normal 守卫拦不住红后蓝 → 叠加双倍回滚。蓝冲分支 UpdateTxnStatus 前加 HasReversal(origs[0].TxnID) 检查。至此四种冲正顺序组合(蓝蓝/蓝红/红红/红蓝)均有守卫。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(bank): B-3 蓝冲入口加 HasReversal 检查,闭合\"红冲后蓝冲\"双倍回滚漏洞",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T22:08:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2f93b9a7a9f74a1589fc5980445815d73f3c51d",
          "body": "…l)+ 40P01→409\n\nfinal review Important #1: Reverse 无锁致并发冲正重复回滚/重复反向分录(资金漏洞)→ 蓝冲 UpdateTxnStatus 加 txn_status='normal' 守卫(sql.ErrNoRows→ErrAlreadyReversed);红冲不改 txn_status(spec §7.3),改用 LockTxnsByVoucher(FOR UPDATE) 串行 + HasReversal(ref_txn_id) 防重复。Important #2: statusFor 加 pgconn.PgError 40P01→409。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(bank): B-3 并发冲正原子守卫(蓝冲 UpdateTxnStatus normal 守卫 + 红冲锁+HasReversa…",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T22:02:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d5bbc4295cede63d3f4ab66ab92608c74fd1f521",
          "body": "…plates.tar\n\n新增 TestRecord_Concurrent_NoDeadlock(A→B 100 / B→A 50 并发,断言 A=9950.00 B=10050.00)。\n\n修复 EnsureBalanceRow 跨日继承并发缺陷:原实现仅对历史行 FOR UPDATE,两个并发事务都看到 latestDate<bizDate 各自 INSERT 当天行导致 unique 冲突(duplicate-key)。改为 INSERT...ON CONFLICT DO NOTHING 建当天行 + 对当天行 FOR UPDATE 串行,10/10 并发跑稳定通过。\n\n同步修复两处集成\n[…]\nmeric(18,2) 列以「元」存值,原 seed 写裸 1000000/50000 被当元存)。\n\ne2e 冒烟验证(DB_PORT=5433 临时容器):deposit 100→余额 +100、withdraw 50→余额 -50、blue-reverse→余额复原,全链路 201/200 正常。\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(bank): B-3 集成 — 并发 A→B/B→A 不死锁 + EnsureBalanceRow 并发修复 + 重打包 tem…",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T19:16:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9a0a11c85451b9c853583b7a05076a7e4926dd5b",
          "body": "具名变量复用(ledgerRepo/ledgerSvc/txnRepo)替代 Task 6 内联版;package 注释更新(不再仅只读)。Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-3 main — core-banking 装配写依赖(TxnService 注入 db/ledger/store)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T18:53:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b5c1ea542343b6080cfbaf73a2ea2669eab11b5",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-3 api — PostTxn/ReverseVoucher handler + 路由 + 错误码映射",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T18:46:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e63aa81e9fac966d80f6405c549a1df55a539349",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-3 service — txn_service.Reverse 冲正(蓝冲改状态+逆向delta / 红冲反向分录)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T18:38:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "57214590721183a85930011f870454954fd11b52",
          "body": "Record: parse intent → RunInTx → EnsureBalanceRow(asc) → overdraft check → BuildEntries → Post → SetTxnSummary.\n\nKey design points:\n- 7-method LedgerStore: added SetTxnSummary (interface/repo/fake consistent).\n- Primary account: clean single-fetch (AccountNo or FromAccount for transfer).\n- Lock orde\n[…]\nndlers_test.go updated to new NewTxnService signature (Task 9 will refine wiring).\n- Transfer/overdraft/atomicity integration tests deferred to Task 10.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-3 service — txn_service.Record 记账(事务原子+透支+lock ordering)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T18:27:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb18edbd37d1679d582e94812efba3ca0d506bdd",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-3 service — posting 科目规则(deposit/withdraw/transfer→复式分录)",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T18:09:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d1cb177acf7e08e8b46c3300516e4e7b1159af35",
          "body": "…nceRow/GetTxnsByVoucher/UpdateTxnStatus\n\nPost 改造为接受 DBTX + 返回 txns(事务原子+回填ID);EnsureBalanceRow 解决 account_balance 跨日继承。Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bank): B-3 repo — LedgerRepo 写方法事务化(DBTX) + 回填TxnID + EnsureBala…",
          "author_name": "yuhaochen",
          "author_login": "HoweChen",
          "committed_at": "2026-07-15T18:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 146,
      "latest_release_at": "2026-07-24T18:19:04Z",
      "latest_release_tag": "v0.3.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 2.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/projanvil/jiade",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/projanvil/jiade",
          "is_deprecated": false,
          "latest_version": "v0.3.0",
          "repository_url": "https://github.com/projanvil/jiade",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T18:18:38Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "templates/bank/Makefile",
        "templates/commerce/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod",
        "templates/bank/go.mod",
        "templates/commerce/go.mod"
      ],
      "largest_source_bytes": 58683,
      "source_files_sampled": 235,
      "oversized_source_files": 0,
      "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/manifoldco/promptui",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.9.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.1"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "HoweChen",
          "commits": 146,
          "avatar_url": "https://avatars.githubusercontent.com/u/5387479?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "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": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "29 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "3deb3ff8a9e993cbc933a4b3567f0d6ce579d43c",
        "ran_at": "2026-07-29T02:35:06Z",
        "aggregate_score": 2.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T18:21:16Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ProjAnvil/Jiade",
    "host": "github.com",
    "name": "Jiade",
    "owner": "ProjAnvil"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 22,
        "vitality": 74,
        "community": 24,
        "governance": 32,
        "engineering": 70
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 74,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 146,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "146 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 146
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v0.3.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 2.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 32,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 41,
            "inputs": {
              "followers": 1,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "ProjAnvil",
              "public_repos": 11,
              "account_age_days": 245
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1 followers of ProjAnvil",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "ProjAnvil"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "11 public repos, account ~0 yr old",
                "points": 9.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 11
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/projanvil/jiade"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 70,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "data-seeding",
                "docker",
                "golang",
                "microservice"
              ],
              "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": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": 22,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 22,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 2.2
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "29 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 65,
        "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.97,
              "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": "97 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 97,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "templates/bank/Makefile",
                "templates/commerce/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.52,
              "toolchain_manifests": [
                "go.mod",
                "templates/bank/go.mod",
                "templates/commerce/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, templates/bank/Makefile, templates/commerce/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, templates/bank/Makefile, templates/commerce/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": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "52 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 52,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 58683,
              "source_files_sampled": 235,
              "oversized_source_files": 0
            },
            "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": "0/235 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 235,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-29T02:35:13.731025Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/p/ProjAnvil/Jiade.svg",
  "full_name": "ProjAnvil/Jiade",
  "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 agregadasGo.