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

kenshin579 / korea-investment-stock

python wrapper for the KIS

GoMIT★ 0 estrellas⑂ 0 forksdesde feb 2025forkVer en GitHub ↗

kenshin579/korea-investment-stock tiene un índice de salud de 50 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (84/100) y la más baja, Community & Adoption (12/100). Se actualizó por última vez hace 6 días. Una sola persona concentra la mayor parte del trabajo reciente.

50
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

50
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

Frank OhCuenta personal
61 seguidores372 repositorios públicosdesde feb 2012NAVER LABS Corp

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/kenshin579/korea-investment-stockv1.29.0-52hace 6 días

Métricas por categoría

Vitalidad

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

84Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 6 días
10.4/36Cadencia de commits — 15/52 semanas con commits
18/18Volumen de commits — 485 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year485
human_commit_share1
days_since_last_push6
active_weeks_last_year15
Cómo se puntúa
27/27Publica versiones — 45 versiones publicadas
36/36Recencia de las versiones — última versión hace 6 días
27/27Cadencia de publicación — una versión cada ~7,9 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count45
latest_release_tagv1.29.0
releases_from_tagsno
days_since_latest_release6
mean_days_between_releases7,9
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?

12Crí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
0/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_readmeno
has_licenseno
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?

64Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
3.1/22.5Distribución de commits — el principal contribuyente firma el 86% de los commits
10.8/13.5Amplitud de contribuyentes — 8 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled8
top_contributor_share0,863
Cómo se puntúa
45.5/46.8Resolución de issues — 97% de issues cerradas
37.9/38.3Aceptación de PR — 122/123 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/13 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs122
open_issues1
closed_issues37
issue_closed_ratio0,974
closed_unmerged_prs1
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
12.9/25Alcance del propietario — 61 seguidores de kenshin579
25/25Trayectoria — 372 repos públicos, cuenta de ~14 años
Datos de entrada utilizados
followers61
owner_typeUser
is_verified
owner_loginkenshin579
public_repos372
account_age_days5262
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 6 días
20/20Historial de versiones — 52 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/kenshin579/korea-investment-stock
ecosystemsgo
any_deprecatedno
min_days_since_publish6

Calidad de Ingeniería

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

43En riesgo · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 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 — 0 out of 13 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

35En riesgo
Cómo se puntúa
0/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readmeno
has_docs_dir
has_descriptionno

Seguridad

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

33En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — sin datos
0/2.5CI-Tests — 0 out of 13 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/13 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 11 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3,3
Excluidos de la puntuación (sin datos o no aplicable): branch_protection, 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.

73Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 79 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,79
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes8174
Cómo se puntúa
12.6/18Arranque con un solo comando — go.mod (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 83 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_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,83
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54.7/55Tamaños de archivo manejables — 1/204 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes106.698
source_files_sampled204
oversized_source_files1
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 3.3 / 10
3.3agregado

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

10Binary-Artifactsno binaries found in the repo
n/dBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
0CI-Tests0 out of 13 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/13 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities11 existing vulnerabilities detected
Dependencias directas 10
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/alicebob/miniredis/v2v2.37.0go.mod
Gogithub.com/coder/websocketv1.8.14go.mod
Gogithub.com/go-resty/resty/v2v2.17.2go.mod
Gogithub.com/jarcoal/httpmockv1.4.1go.mod
Gogithub.com/redis/go-redis/v9v9.19.0go.mod
Gogithub.com/shopspring/decimalv1.4.0go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogolang.org/x/syncv0.20.0go.mod
Gogolang.org/x/textv0.36.0go.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": [],
      "is_fork": true,
      "size_kb": 2736,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1242469,
        "Shell": 2603
      },
      "pushed_at": "2026-07-19T04:06:32Z",
      "created_at": "2025-02-15T08:42:56Z",
      "owner_type": "User",
      "updated_at": "2026-07-19T04:06:06Z",
      "description": "python wrapper for the KIS ",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "advenoh.pe.kr",
      "name": "Frank Oh",
      "type": "User",
      "login": "kenshin579",
      "company": "NAVER LABS Corp",
      "location": "South Korea",
      "followers": 61,
      "avatar_url": "https://avatars.githubusercontent.com/u/1477631?v=4",
      "created_at": "2012-02-27T07:42:23Z",
      "is_verified": null,
      "public_repos": 372,
      "account_age_days": 5262
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.29.0",
          "kind": "minor",
          "published_at": "2026-07-19T04:06:33Z"
        },
        {
          "tag": "v1.28.0",
          "kind": "minor",
          "published_at": "2026-06-13T07:47:00Z"
        },
        {
          "tag": "v1.27.0",
          "kind": "minor",
          "published_at": "2026-05-25T13:29:06Z"
        },
        {
          "tag": "v1.26.0",
          "kind": "minor",
          "published_at": "2026-05-09T14:25:52Z"
        },
        {
          "tag": "v1.25.0",
          "kind": "minor",
          "published_at": "2026-05-09T14:10:21Z"
        },
        {
          "tag": "v1.24.0",
          "kind": "minor",
          "published_at": "2026-05-09T13:49:36Z"
        },
        {
          "tag": "v1.23.0",
          "kind": "minor",
          "published_at": "2026-05-09T13:03:39Z"
        },
        {
          "tag": "v1.22.0",
          "kind": "minor",
          "published_at": "2026-05-09T12:34:49Z"
        },
        {
          "tag": "v1.21.0",
          "kind": "minor",
          "published_at": "2026-05-09T11:44:38Z"
        },
        {
          "tag": "v1.20.0",
          "kind": "minor",
          "published_at": "2026-05-09T08:27:08Z"
        },
        {
          "tag": "v1.19.0",
          "kind": "minor",
          "published_at": "2026-05-09T06:53:24Z"
        },
        {
          "tag": "v1.18.0",
          "kind": "minor",
          "published_at": "2026-05-09T04:08:24Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2026-05-08T09:14:49Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2026-05-07T22:35:56Z"
        },
        {
          "tag": "v1.15.0",
          "kind": "minor",
          "published_at": "2026-05-07T20:44:22Z"
        },
        {
          "tag": "v1.14.0",
          "kind": "minor",
          "published_at": "2026-05-07T13:23:51Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2026-05-07T11:45:43Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2026-05-07T10:56:39Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2026-05-06T17:40:50Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-05-06T07:01:26Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-05-06T01:34:42Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-05-06T01:07:34Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-05-05T12:16:59Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-05-05T10:10:39Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-05-05T09:32:35Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-05-05T04:55:02Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-05-05T00:28:42Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-05-04T23:19:06Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-05-04T13:09:14Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-05-04T08:39:35Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-02-15T00:07:15Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2025-12-22T08:00:53Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2025-12-13T08:04:17Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2025-12-13T04:06:57Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2025-12-13T03:50:03Z"
        },
        {
          "tag": "v0.10.2",
          "kind": "patch",
          "published_at": "2025-12-06T14:53:27Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2025-12-06T14:47:52Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2025-12-06T14:23:59Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2025-12-06T11:03:25Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2025-12-06T08:17:22Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2025-12-04T00:32:48Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2025-11-29T23:36:47Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2025-11-29T22:50:47Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2025-11-07T16:36:33Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2025-11-07T15:41:11Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "7bca3253b10e72c0e5088bf3f695a46873e76074",
          "body": "* fix: KIS 매매동향 빈 문자열 숫자 필드 관용 파싱\n\n무거래/거래정지 종목에서 KIS 가 가격·수량 필드를 \"\" 로 내려주면\nshopspring/decimal 및 ,string 정수 파싱이 실패해 응답 전체가 버려지던 문제.\ninvestor/program 리프 구조체에 관용 UnmarshalJSON 을 붙여 \"\"/null 숫자를 0 으로\n파싱(필드 타입 불변, 문자열 필드 보존).\n\n* perf: 빈 문자열 없는 응답은 map 왕복 생략 + flat-fields 주석",
          "is_bot": false,
          "headline": "fix: KIS 매매동향 빈 문자열 숫자 필드 관용 파싱 (#161)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-07-19T04:06:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba159c3d1d1440bd5d5809e73395c819ee4aa745",
          "body": "문제: KIS 토큰 캐시가 오염/만료되면 모든 API 호출이 HTTP 500(EGW00121\n\"유효하지 않은 token\")을 받고 send() 가 이를 일시적 5xx 로 오인해 종목마다\n3회씩 헛재시도 → 사실상 무한 retry 후 실패.\n\nFix #1 — KOREA_INVESTMENT_TOKEN_FILE 배선\n- from_env 가 cfg.TokenFile 을 무시하고 항상 기본 경로(~/.cache/kis/token.json)만\n  사용하던 회귀 수정. storageFromConfig() 헬퍼로 redis/file/기본 분기를 \n[…]\nFileStorage 주입).\n\n테스트: 신규 TestClient_Do_InvalidTokenHTTP500AutoRefresh,\nTestStorageFromConfig_* 추가. go build/vet/test ./... 전체 통과.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: 토큰 파일 env 배선 + 무효 토큰(EGW00121) 자동 refresh (#160)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-06-13T07:46:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6eb77fa430e04405f3c6c55ed31ec68f4491f41f",
          "body": "* chore: opendart 릴리스 자동화 스크립트 이식 (scripts/release.sh)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* fix: 국내 손익계산서/대차대조표 금액 decimal 파싱 (int64,string → decimal.Decimal)\n\nKIS 가 sale_account 등을 4964.00(소수점 bare number)로 내려줘 int64,string 파싱 실패 → 502.\nfixture 를 실제 형식으로 교정하고 16개 필드를 decimal.Decimal 로 변경.\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: 국내 손익계산서/대차대조표 금액 decimal 파싱 + 릴리스 스크립트 (#159)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-25T13:28:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1b81ac8c7307d3e3ca93cbb675fb5693315c841b",
          "body": "* docs: 해외 응답 부호(+) float 파싱 버그 수정 설계 추가\n\n해외 KIS 응답의 \"+1.26\" 형식 등락 필드가 float64+`,string` 태그로\n파싱되지 못해(JSON number 는 leading + 금지) 해외 quote/chart 전반이\n깨지는 버그의 근본 원인 분석 및 kistypes.Float 도입 설계.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n* docs: 해외 부호 float 파싱 수정 구현 계획서 추가\n\nkis\n[…]\n파싱\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n* docs: CHANGELOG v1.27.0 (해외 부호 float 파싱 수정)\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: 해외 응답 부호(+) float 파싱 버그 수정 (v1.27.0) (#158)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-23T08:23:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5fc8526b5e9e88949b98efd5b0c2fc6ef70f0243",
          "body": "* [docs] Phase 11.7 — schemas + 2 fixtures (해외선물옵션 실시간)\n\nHDFFF020 체결가 25 fields, HDFFF010 호가 35 fields 확정.\n그릭스 미포함, 선물/옵션 통합 EP, Endpoint 동일 (ws://ops.koreainvestment.com:21000).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* [feat] Phase 11.7 — 해외선물옵션 실시간 2 EP (events + decoders + cl\n[…]\nket Phase 11.7 section\n\n누적 150 REST + 36 WS = 186 endpoints.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 11.7 — 해외선물옵션 실시간 시세 2 EP (v1.26.0) (#157)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T14:25:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e7d2d4818a1a94026a6f14edb66626a4e01feb0c",
          "body": "* [docs] Phase 11.6 — schemas + 10 fixtures (10 EP, alias 결정)\n\n해외옵션 시세/조회 9 EP + 장운영시간 1 EP = 10 EP REST.\n- overseasfutures/testdata/_schemas_phase11_6.md: 각 EP schema 정확 추출 + Phase 11.5 alias 결정\n- 10 fixtures: inquire_time_optchartprice / search_opt_detail / opt_monthly_ccnl /\n  opt_daily_ccnl / op\n[…]\n해외선물 + 11.6 해외옵션 + 공통)\n\n누적 150 REST + 34 WS = 184 endpoints.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 11.6 — 해외옵션 시세 + 공통 장운영시간 10 EP (v1.25.0) (#156)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T14:10:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a08220a7957a30f2d896f3f06db81c8bca814ebe",
          "body": "* [docs] Phase 11.5 — overseasfutures/testdata/_schemas.md (10 EP) + 10 fixtures\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* [chore] Phase 11.5 — overseasfutures/ scaffolding (Client, doc, testhelper) + root Client.OverseasFutures\n\n* feat(overseasfutures): EP10/EP9/EP3/EP8 quote 4 \n[…]\n\n- client.go: gofmt 적용\n\n누적 140 REST + 34 WS = 174 endpoints.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 11.5 — 해외선물 시세/조회 10 EP (v1.24.0) (#155)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T13:49:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ea442ccea63f01f3cd7e97b16af9d1930b9dbc55",
          "body": "* [docs] Phase 11.3 — schemas + 6 fixtures (지수/상품선물옵션 분석, alias 결정)\n\n- _schemas_phase11_3.md: 6 EP 정확 field count (IF=50, IFASP=38, IO=58, IOASP=38, CF=50, CFASP=38)\n- alias 결정: CFCNT0==IFCNT0, CFASP0==IFASP0 (field-by-field 동일) → 2 alias\n- IOCNT0 distinct: AVRG_VLTL + DSCS_LRQN_VOL + DYNM 3 fields \n[…]\non (6 EP 표)\n\n누적 130 REST + 34 WS = 164 endpoints.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 11.3 — 지수선물옵션 + 상품선물 실시간 6 EP (v1.23.0) (#154)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T13:03:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "16ba54d3b3f0f3e8baf730e7847f5ca6a7e2caf2",
          "body": "* [docs] Phase 11.2 — schemas + 11 fixtures (11 EP analysis)\n\n국내선물옵션 실시간 11 EP 분석 결과:\n- _schemas_phase11_2.md: 전체 schema reference (EP Matrix, alias 분석, field 매핑, TR_ID 상수, decoder 패턴)\n- 11 caret fixtures: h0mf*/h0eu*/h0zf*/h0zo* (체결/호가/예상체결 각 카테고리)\n\n주요 발견: Phase 9 와 달리 11 EP 모두 Distinct (alias 불가).\n[…]\n11.2 section (11 EP 표)\n\n누적 130 REST + 28 WS = 158 endpoints.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 11.2 — 국내선물옵션 실시간 11 EP (v1.22.0) (#153)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T12:34:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9ea72d63bdac3c715885932944d046f5c59cb5f1",
          "body": "* [docs] Phase 11.1 — 국내선물옵션 시세/조회 design spec (lightweight)\n\n신규 sub-package futures/ 도입. 11 EP REST 시세/조회.\n\n핵심 결정:\n- Sub-package 명: futures/ (bonds/ 패턴 일관)\n- Scope: 11 EP (수수료 EP 포함)\n- 절차: lightweight spec + plan skip + 직접 구현 (Phase 6/7/9 패턴)\n- Out of scope: 실시간 (11.2~11.3), Trading (11.4 HIGH RISK\n[…]\n section 추가\n\n누적 130 REST + 17 WS = 147 endpoints.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 11.1 — 국내선물옵션 시세/조회 9 EP (v1.21.0) (#152)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T11:44:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "288d570e2e2094ddfb6197ae5a2b0ceeac8d6bc1",
          "body": "* [feat] Phase 10 — WebSocket 해외주식 실시간 시세 2 EP\n\n해외주식 실시간 첫 cover. WebSocket 인프라 (Phase 8/9) 그대로 재사용.\n\n신규:\n- websocket/events_phase10.go: OverseasTradeEvent (26 fields), OverseasAskEvent (17 fields)\n- websocket/decode_phase10.go: decodeOverseasTrade/Ask\n- websocket/decode_phase10_test.go: 5 tests (ha\n[…]\nse 10 EP 매핑\n\n누적 121 REST + 17 WS = 138 endpoints.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 10 — WebSocket 해외주식 실시간 시세 2 EP (v1.20.0) (#151)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T08:26:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c9661b48ae2fd5c7ab99b5f918a3d6b51199f84",
          "body": "* [docs] Phase 9 — schema reference + 10 fixtures + lightweight design spec\n\n10 docs analyzer 결과 기반 schema 확정:\n- 체결가 NXT/통합 (H0NXCNT0/H0UNCNT0): 46 fields, KRX 와 동일 schema (22번 CNTG_CLS_CODE — KRX CCLD_DVSN 의미 동일)\n- 호가 NXT/통합 (H0NXASP0/H0UNASP0): 65 fields = KRX 59 + KMID/NMID 6 (중간가)\n- 예상체결 NXT/통합 \n[…]\n응답 표 직접 검증)\n\n누적 121 REST + 15 WS = 136 endpoints.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 9 — WebSocket NXT/통합 변형 10 EP (v1.19.0) (#150)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T06:53:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d61e8ddad5d58d0d8da317a0bde23ed266f9ae56",
          "body": "[feat] Phase 8 — WebSocket KRX 시세 5 endpoint (v1.18.0)",
          "is_bot": false,
          "headline": "Merge pull request #149 from kenshin579/feat/phase8-websocket-design",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T04:07:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a73b53ee6da220bcb3a29b428a5f3082d44d869b",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[docs] Phase 8 — example + README + CLAUDE + CHANGELOG (v1.18.0)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T04:02:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "166377d4140583bd558debd40d93c173df7a2048",
          "body": "…/pingpong/shutdown)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[test] Phase 8 — integration tests (wsmock e2e: happy/reconnect/error…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:59:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "29bd0d4d4772c657cad6235956f80ba36fc04e68",
          "body": null,
          "is_bot": false,
          "headline": "[chore] Phase 8 — wsmock local KIS WebSocket server",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:55:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17632e162e80304a9f78a0ca53ca3adab0853e23",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] Phase 8 — kis.Client.WS 필드 추가 (websocket.Client 주입)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:54:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cea49aeee6a151818e01a50ef9b5615ba3610646",
          "body": "…dler types)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] Phase 8 — public Client (Run loop + Subscribe + 5 distinct Han…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:53:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3d4d0a0f75a3e8cd351cdef90cf062e7f06309bc",
          "body": null,
          "is_bot": false,
          "headline": "[feat] Phase 8 — ConnectionManager (coder/websocket wrapper)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:41:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3b6087369ada1280e16b04365ea21e865ce0c3c",
          "body": null,
          "is_bot": false,
          "headline": "[feat] Phase 8 — ApprovalKeyManager (POST /oauth2/Approval, TTL 캐시)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:40:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e124aa6af80f82f5c5467a7cb0acd8dba3abb198",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] Phase 8 — Dispatcher (5 distinct handler types + recover)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:39:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d8b1bee13c5a8984d05ae0d1294b616f117abe08",
          "body": "… tolerance)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] Phase 8 — decode_krx (5 distinct decoder, paging + bad numeric…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:37:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f42e3b82f3b9dbabe9537b1e3079c2d0f581d3da",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] Phase 8 — frame parser (realtime/JSON/PINGPONG 분기) + chunkFields",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:14:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c9f4c7cdc52a9d798b95f59d2bf64d806925f1c",
          "body": null,
          "is_bot": false,
          "headline": "[feat] Phase 8 — ReconnectController (exp backoff, max attempts)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:11:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b39a9e5345160d8b32c510f7392125986f3fc28",
          "body": null,
          "is_bot": false,
          "headline": "[feat] Phase 8 — Subscriber (활성 구독 map, thread-safe)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:10:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c43d963995af663de12ac590b128997ab261b8f",
          "body": "…ExpectTradeEvent / KrxOvernightTradeEvent / KrxOvernightExpectEvent)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] Phase 8 — 5 EP Event struct (KrxTradeEvent / KrxAskEvent / Krx…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:09:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c18c1e2c6349cd5d407631cd222888869f2cede6",
          "body": null,
          "is_bot": false,
          "headline": "[feat] Phase 8 — websocket typed errors + WSServerError",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:06:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f7366a22836fc73d4bc0a04adc8bee355921e8c",
          "body": "5 docs analyzer 결과 + 정정사항:\n- 시간외 체결가 TR_ID: H0STOAC0 → H0STOUP0 (plan 추정 정정)\n- 시간외 예상체결 TR_ID: H0STOAA0 → H0STOAC0 (plan 추정 정정)\n- H0STCNT0 field count: 44 → 46 (HOUR_CLS_CODE/MRKT_TRTM_CLS_CODE/VI_STND_PRC 추가)\n- H0STASP0 field count: 42 → 59 (subagent 가 일부 그룹핑한 결과 정정)\n- 본장 vs 시간외 schema 다름 — Event 5\n[…]\ntdata/h0stasp0_success.txt (59 fields)\n- websocket/testdata/h0stanc0_success.txt (45 fields)\n- websocket/testdata/h0stoup0_success.txt (43 fields)\n- websocket/testdata/h0stoac0_success.txt (43 fields)",
          "is_bot": false,
          "headline": "[chore] Phase 8 — 5 EP schema 추출 + caret fixtures",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T03:05:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8ae1648d72dced95072c49c9c6683d55f3e54f13",
          "body": null,
          "is_bot": false,
          "headline": "[chore] Phase 8 — websocket 패키지 scaffold + coder/websocket dep",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T02:59:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13e9bd0534dd55545dcf0e142eb5ee851bd7e10d",
          "body": "writing-plans skill 결과. design spec 의 5 섹션을 16 task 로 분해:\n\n- Task 1: Setup (branch, deps, scaffold)\n- Task 2: 5 EP docs analyzer + schema 추출\n- Task 3-4: errors + Event struct\n- Task 5-6: Subscriber + Reconnect (TDD)\n- Task 7-8: frame parser + decode (TDD)\n- Task 9-11: Dispatcher + Approval + Conn (T\n[…]\n-15: wsmock + integration tests\n- Task 16: example + docs + PR\n\nSpec: docs/superpowers/specs/2026-05-09-phase8-websocket-design.md\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[docs] Phase 8 — implementation plan (16 tasks)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T02:10:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0b89f6c89923341e67c1fbecf59d3b3d900cbda",
          "body": "브레인스토밍 결과 기반 design spec.\n\n- Scope: 인프라 + 국내주식 KRX 시세 5 endpoint (체결가/호가/예상체결/시간외체결가/시간외예상체결)\n- API style: callback handler (OnXxx(handler))\n- Reconnect: 자동 + 구독 자동 복원 (exp backoff)\n- Architecture: Approach A — 신규 top-level websocket/ 패키지\n- WS 라이브러리: coder/websocket\n- 누적 121 REST + 5 WS = 126 endpoints (v1.18.0)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[docs] Phase 8 — WebSocket (Domestic KRX) design spec",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-09T01:47:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e66ca4449841cef16bca9dbec3a13976b1daf2a6",
          "body": "[feat] Phase 7 — 헬퍼 4 메서드 (v1.17.0)",
          "is_bot": false,
          "headline": "Merge pull request #148 from kenshin579/feat/phase7-helpers",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-08T09:14:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "265e0ac5cc6dcd0aa86a395ab0485a9ce35319a4",
          "body": "- Domestic.InquireMarketTime — 국내선물 영업일조회 (HHMCM000002C0)\n- Domestic.InquireCompInterest — 금리 종합 (FHPST07020000) — output1 single + output2 array\n- Domestic.InquireTradedByCompany — 당사매매종목 상위 (FHPST01860000) — 12 fields, 4 hardcoded\n- Domestic.InquireCreditByCompany — 당사 신용가능종목 (FHPST04770000) — 3 fields, 2 hardcoded\n\nEP0 (상품기본조회 CTPF1604R) 는 Phase 1.1 SearchInfo 와 중복으로 제외.\n누적 117 → 121 메서드.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] Phase 7 — 헬퍼 4 메서드 (v1.17.0)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-08T09:02:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "965c3b3eca386a30bdd06b9206f9cac47861c6ca",
          "body": "[feat] Phase 6 — 재무 추가 2 메서드 (v1.16.0)",
          "is_bot": false,
          "headline": "Merge pull request #147 from kenshin579/feat/phase6-financial-extension",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T22:35:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08c07fc3bee4ebcb221990e52c8e414665f03e28",
          "body": "- domestic/financial.go: InquireOtherMajorRatios (FHKST66430500) — 기타주요비율 (EVA/EBITDA/EV-EBITDA)\n- domestic/ranking.go: InquireFinanceRatioRanking (FHPST01750000) — 재무비율 순위 (수익성/안정성/성장성/활동성)\n- testdata 2 fixtures + 테스트 6 (성공 + Quarter + Override + InvalidJSON × 2)\n- examples: domestic_financial / do\n[…]\nd, 페이지네이션 없음 (최대 30 건)\n\n품질 게이트: gofmt/vet/build/race clean, domestic 82.1% / root 86.9% coverage, 10 패키지 모두 통과.\n\n누적 115 → 117 메서드.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] Phase 6 — 재무 추가 2 메서드 (v1.16.0)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T22:34:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dab4334ecc792284e41fc8a764f18674f830902d",
          "body": "Phase 5 — ETF/NAV/관심종목 9 REST methods (v1.15.0)",
          "is_bot": false,
          "headline": "Merge pull request #146 from kenshin579/feat/phase5-etf-watchlist",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T20:43:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f157f8249fa6e96bfe6d2bd3cc8f2823b106094",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[docs] Phase 5 문서 갱신 (v1.15.0)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:19:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "746776a5879cc18c91c30198106f470235d390f2",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] examples — domestic_etf_watchlist (Phase 5 9 메서드 시연)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:17:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "306e6eb99a6710552f54189d68a5ad06b61b4f7c",
          "body": "…PST01800000)\n\n- output []TopInterestStockItem (13 fields/item)\n- 파라미터 키 모두 lowercase fid_* 형식 (다른 watchlist 메서드와 상이)\n- fid_cond_scr_div_code = \"20180\" 고정 (하드코딩)\n- path: /uapi/domestic-stock/v1/ranking/top-interest-stock\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/watchlist.go — InquireTopInterestStock (관심종목등록 상위, FH…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:14:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9bc3fc9e23a2ee5355cfd8b7e37a9edf434a79dc",
          "body": "…HKCM113004C7)\n\n- output2 IntstockGrouplistItem (단일 객체, 6 fields) — output1 필드 없음\n- 응답 구조체 IntstockGrouplist.Output2 의 JSON 태그: \"output2\" (output1 없는 이례적 구조 그대로 반영)\n- USER_ID = HTS 로그인 ID (HTS_ID) 필수. FID_ETC_CLS_CODE 기본값 \"00\"\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/watchlist.go — InquireIntstockGrouplist (관심종목 그룹조회, H…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:13:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f581905e09b1065c73fc42d37fa1b96c043f68db",
          "body": "…그룹별 종목조회, HHKCM113004C6)\n\n- output1 IntstockGroupSummary (단일 객체, 2 fields) + output2 []IntstockStocklistItem (10 fields/item)\n- non-FID UPPERCASE 파라미터 (TYPE, USER_ID, DATA_RANK, INTER_GRP_CODE, INTER_GRP_NAME, HTS_KOR_ISNM, CNTG_CLS_CODE, FID_ETC_CLS_CODE)\n- CRITICAL: USER_ID = HTS 로그인 ID (HTS_ID). Params struct 주석에 명시\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/watchlist.go — InquireIntstockStocklistByGroup (관심종목 …",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:12:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "42c405393c1bc4ac313d4ea07c65982893613952",
          "body": "…FHKST11300006)\n\n- CREATE domestic/watchlist.go + domestic/watchlist_test.go\n- 30쌍 batch 입력: MarketCodes/Symbols 슬라이스 → FID_COND_MRKT_DIV_CODE_1..30 / FID_INPUT_ISCD_1..30 번호 키로 변환\n- 응답은 단일 output 객체 (array 아님) — IntstockMultpriceData 29 fields\n- 가격 decimal.Decimal, 수량/거래대금 int64, 비율 float64,string 타입 규칙 준수\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/watchlist.go — InquireIntstockMultprice (관심종목 멀티 시세, …",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:11:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "590fb2d9f0bad4147a4df52461722cd2ed6bc54f",
          "body": "…2440000)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/etf.go — InquireNavComparisonTrend (NAV 비교 추이, FHPST0…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:08:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "776c5415e8abeb9a9bc5f24d19fc750610eef324",
          "body": "…, FHPST02440200)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/etf.go — InquireNavComparisonDailyTrend (NAV 비교 일별 추이…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:07:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c9936f384d7b788b45e9658065eba3c85354a77f",
          "body": "… FHPST02440100)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/etf.go — InquireNavComparisonTimeTrend (NAV 비교 시간 추이,…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:06:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5f5c07f65d89de061241c6b5881caa396effe485",
          "body": "…ST121600C0)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/etf.go — InquireComponentStockPrice (ETF 구성종목 시세, FHK…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:05:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "69a5e3490189db0cd8a8a4649c13e8c1a53fd5bc",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/etf.go — InquireEtfPrice (ETF/ETN 현재가, FHPST02400000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:04:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5de57936e3900ff9c8700823c5b38314fdb46988",
          "body": "ETF/NAV (5: etf_price 54 fields + component_stock_price + nav_comparison_*) +\n관심종목 (4: intstock_multprice 30종 single obj + stocklist_by_group +\ngrouplist output2-only + top_interest_stock).\n\nEP3 (NAV 추이 H0STNAV0) 는 WebSocket — 제외.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[chore] testdata — 9 etf-watchlist fixture JSON (Phase 5)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T14:01:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fa7813d08566006cbe3c8cd870908b5927088a35",
          "body": "10 docs 중 EP3 (H0STNAV0 NAV 추이) 는 WebSocket → 제외. Phase 5 = 9 REST.\n\n신규 file 2:\n- domestic/etf.go — ETF/NAV 5 methods (EP1+EP2+EP4+EP5+EP6)\n- domestic/watchlist.go — 관심종목 4 methods (EP7+EP8+EP9+EP10)\n\n9 anomaly: EP1 name collision (InquirePrice → InquireEtfPrice), ETF base\npath /uapi/etfetn/v1/, mix\n[…]\nUSER_ID 필요, EP9 output2\nonly, EP10/EP2 hardcoded scr_div_code.\n\n누적 106 → 115. Phase 4.3 패턴 (plan skip + direct batch dispatch) 적용.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(superpowers): Phase 5 design — ETF/NAV/관심종목 9 REST methods",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:58:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "74f3c5f2174b016b6e1530ef3ab3c2e7d6e51b8b",
          "body": "Phase 4.3 — 추가 ranking/흐름 (v1.14.0) [Phase 4 완료]",
          "is_bot": false,
          "headline": "Merge pull request #145 from kenshin579/feat/phase4-3-rank-flow",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:23:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1aa671966730f9832fba5d3eb456c3e882bf194e",
          "body": "- CLAUDE.md: 배너 갱신 (106 메서드, Phase 4 완료), Phase 4.3 노트 추가\n- README.md: 헤딩 \"Phase 1.2 ~ 4.3\", 13 메서드 행 추가 (93→106)\n- CHANGELOG.md: v1.14.0 추가 (EP1-EP13, Phase 4 종료 하이라이트)\n- domestic/doc.go: Phase 4.3 섹션 추가 (13 메서드 + anomalies)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[docs] Phase 4.3 문서 갱신 (v1.14.0, Phase 4 완료)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:15:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eb2052d9ab64a831ab1f70347c2658d7b771ed2f",
          "body": "- EP1-EP13 전체 커버: InquireShortSale/DailyShortSale/CreditBalance/DailyCreditBalance/\n  LendableByCompany/QuoteBalance/AfterHourBalance/OvertimeExpTransFluct/MarketValue/\n  Disparity/PreferDisparateRatio/ProfitAssetIndex/Mktfunds\n- 삼성전자(005930) + 시장전체(0000) 혼합 호출\n- 각 메서드 대표 필드 출력\n- go build OK, 루트 바이너리 없음\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] examples — domestic_rank_flow (Phase 4.3 13 메서드 시연)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:13:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "50c3e3ea3eba1f7bcf06b71431330df33ec27968",
          "body": "- MktfundsItem 17 fields (통화 단위: 억원/백만원)\n  고객예탁금·신용융자잔고·미수금·선물예수금·펀드순자산·담보대출잔고 포함\n- KOFIA 데이터: path /uapi/domestic-stock/v1/quotations/mktfunds\n- UPPERCASE FID_INPUT_DATE_1 파라미터 사용\n- TestClient_InquireMktfunds 추가 — PASS\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireMktfunds (증시자금 종합, FHKST649100C0)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:11:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ced79c2a92a2168fce91a7090cd0a6cd8c9145f2",
          "body": "- ProfitAssetIndexItem (18 fields): data_rank, hts_kor_isnm, prdy_vrss_sign,\n  mksc_shrn_iscd, stck_prpr(decimal), prdy_vrss(decimal), prdy_ctrt(float64,string),\n  acml_vol(int64,string), sale_totl_prfi/bsop_prti/op_prfi/thtr_ntin(int64,string),\n  total_aset/total_lblt/total_cptl(int64,string), stac\n[…]\nwercase fid_*\n- fid_input_option_1: 회계연도, fid_input_option_2: 분기구분\n- Path: /uapi/domestic-stock/v1/ranking/profit-asset-index (FHPST01730000)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireProfitAssetIndex (수익자산지표 순위, FHPST01730000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:08:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "87c57aba9d339a117c697e65d97805428b991ff2",
          "body": "…000)\n\n- PreferDisparateRatioItem (17 fields): 보통주/우선주 페어드 필드\n  mksc_shrn_iscd, data_rank, hts_kor_isnm, stck_prpr(decimal),\n  prdy_vrss(decimal), prdy_vrss_sign, acml_vol(int64,string),\n  prst_iscd, prst_kor_isnm, prst_prpr(decimal), prst_prdy_vrss(decimal),\n  prst_prdy_vrss_sign, prst_acml_vol(int\n[…]\nreferDisparateRatioParams (9 params) — 모든 쿼리 키 lowercase fid_*\n- Path: /uapi/domestic-stock/v1/ranking/prefer-disparate-ratio (FHPST01770000)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquirePreferDisparateRatio (우선주 괴리율 상위, FHPST01770…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:07:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4e7d6a474ca4c126b72b4e436e90cd091b1a02aa",
          "body": "- DisparityItem (13 fields): mksc_shrn_iscd, data_rank, hts_kor_isnm,\n  stck_prpr(decimal), prdy_vrss(decimal), prdy_ctrt(float64,string),\n  prdy_vrss_sign, acml_vol(int64,string), d5/d10/d20/d60/d120_dsrt(float64,string)\n- InquireDisparityParams (11 params) — 모든 쿼리 키 lowercase fid_*\n- HourClsCode: fid_hour_cls_code — 5/10/20/60/120일 이동평균 선택\n- Path: /uapi/domestic-stock/v1/ranking/disparity (FHPST01780000)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireDisparity (이격도 순위, FHPST01780000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:06:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9120b3f09d9d0e5283d8ddd22ffc9b298947ea9f",
          "body": "- MarketValue / MarketValueItem (20 fields) 추가\n- InquireMarketValueParams (13 params) 추가\n- 쿼리 파라미터는 lowercase fid_* 형식 사용 (UPPERCASE FID_ 아님)\n- 기본값: fid_cond_mrkt_div_code=\"J\", fid_cond_scr_div_code=\"20179\"\n- 가치지표: PER/PBR/PCR/PSR/EPS/EVA/EBITDA/EV(EBITDA)/EBITDA(금융비용)\n- 회계연도(fid_input_option_1), 분기구분(fid_input_option_2) 파라미터 지원\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireMarketValue (시장가치 순위, FHPST01790000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:02:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "767dda5c9a6fdffaaa394a2e709b6e7d40866b90",
          "body": "…860000)\n\n- OvertimeExpTransFluct / OvertimeExpTransFluctData (13 fields) 추가\n- InquireOvertimeExpTransFluctParams (8 params) 추가\n- output 은 단일 객체 (배열 아님): Output OvertimeExpTransFluctData\n- 쿼리 파라미터는 UPPERCASE FID_ 형식 사용\n- ovtm_untp_antc_cntg_vrsssign 오타 보존 (KIS docs 원본 그대로, vrss+sign 연결)\n- InquireOvertimeFluctuation (Phase 2.2) 과 별도 API\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireOvertimeExpTransFluct (시간외 예상체결 등락률, FHKST11…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T13:01:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8d0b8916d92403afec49985aceaa24227fa9a891",
          "body": "- AfterHourBalance / AfterHourBalanceItem (11 fields) 추가\n- InquireAfterHourBalanceParams (10 params) 추가\n- 쿼리 파라미터는 lowercase fid_* 형식 사용 (UPPERCASE FID_ 아님)\n- 종목코드 필드: stck_shrn_iscd (mksc_shrn_iscd 아님) 주의\n- 기본값: fid_cond_mrkt_div_code=\"J\", fid_cond_scr_div_code=\"20176\"\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireAfterHourBalance (시간외잔량 순위, FHPST01760000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T12:59:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6fa76fdce1dfe4c8c1c56f95908c4fb22bbdba93",
          "body": "- 경로: /uapi/domestic-stock/v1/ranking/quote-balance\n- QuoteBalanceItem 13 필드 (매도/매수 호가잔량·비율 + 순매수잔량 포함)\n- 쿼리 파라미터 10개 lowercase fid_* 형식 사용 (fid_vol_cnt, fid_input_iscd 등)\n- 테스트에서 lowercase 키 전송 확인 + UPPERCASE 키 빈값 assertion\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireQuoteBalance (호가잔량 순위, FHPST01720000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T12:56:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f6d41a20b0a97ee04bd50fc9b90c96adc32fb3d0",
          "body": "- 경로: /uapi/domestic-stock/v1/quotations/lendable-by-company\n- TR_ID CTSC2702R (C-prefix 별도 시리즈). CANO 불필요.\n- LendableByCompanyItem 13 필드 + LendableByCompanySummary 3 필드 (output2 단일 객체)\n- 쿼리 파라미터 non-FID UPPERCASE 형식 사용 (EXCG_DVSN_CD, PDNO, CTX_AREA_FK200 등)\n- 테스트에서 UPPERCASE 키 전송 확인\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireLendableByCompany (당사 대주가능 종목, CTSC2702R)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T12:55:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a061d3db3daa831c4fd79eb93662f5db41945014",
          "body": "- 경로: /uapi/domestic-stock/v1/quotations/daily-credit-balance\n- DailyCreditBalanceItem 26 필드 (융자/대주 신규·상환·잔고 수량·금액·비율·담보비율 + 시고저가)\n- 쿼리 파라미터 lowercase fid_* 형식 사용 (fid_input_iscd 등)\n- 테스트에서 lowercase 키 전송 확인 + UPPERCASE 키 빈값 assertion\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireDailyCreditBalance (신용잔고 일별추이, FHPST04760000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T12:53:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0301810134910fbf0d75816eab3e7a0766a68832",
          "body": "UPPERCASE FID_ 파라미터 5개, dual array output: CreditBalanceHeader (4 필드) +\nCreditBalanceItem (15 필드, decimal/int64/float64/string).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireCreditBalance (신용잔고 상위, FHKST17010000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T12:50:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6783f14bd4f1b30bb17e60d44ac52d5e6808fa6a",
          "body": "UPPERCASE FID_ 파라미터 4개, dual output: DailyShortSaleSummary (6 필드) +\nDailyShortSaleItem 배열 (21 필드, decimal/int64/float64/string).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireDailyShortSale (공매도 일별추이, FHPST04830000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T12:48:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8923b4f894215793f1a480014c2f17c1a0b831e3",
          "body": "UPPERCASE FID_ 파라미터 10개, ShortSaleItem 15 필드 (decimal/int64/float64/string).\nhttpmock capturedQuery 패턴으로 테스트 추가.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireShortSale (공매도 상위, FHPST04820000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T12:41:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5ad01aea35485e8bb4df40aa8fb60bb5fb0071bb",
          "body": "13 endpoints fixtures: 공매도 (2) + 신용잔고/대주 (3) + 호가/시간외 (3) +\n순위 (4) + 시장흐름 (1). EP8 (overtime_exp_trans_fluct) 는 single object,\nEP2/EP3/EP5 는 dual output (output1+output2).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[chore] testdata — 13 rank-flow fixture JSON (Phase 4.3)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T12:27:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ae0fdc06da3b66c15618588dfc496837c7f6355a",
          "body": "Phase 4.2 — 시장 특수상태 4 REST methods (v1.13.0)",
          "is_bot": false,
          "headline": "Merge pull request #144 from kenshin579/feat/phase4-2-market-op",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:45:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "affe90b51d8920eeeb8b630c96753cc9f04b24dd",
          "body": "- CLAUDE.md: banner v1.12.0→v1.13.0, Phase 4.2 plan 링크 추가\n- README.md: Available Methods 헤딩 4.1→4.2, Phase 4.2 섹션 4 메서드 추가 (89→93)\n- CHANGELOG.md: [1.13.0] 추가 — WebSocket 3 endpoints (H0STMKO0/H0NXMKO0/H0UNMKO0) 제외 사유 명기\n- domestic/doc.go: Phase 4.2 섹션 + Anomalies 추가\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[docs] Phase 4.2 문서 갱신 (v1.13.0, WebSocket 3개 제외)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:42:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7ed2a53fc880519ad0faf7cad79aa40db93b2415",
          "body": "examples/domestic_market_op/main.go 신규 생성.\nInquireExpClosingPrice/InquireChkHoliday/InquireViStatus/\nInquireCaptureUplowprice 4 메서드 통합 예제.\nkis.NewClientFromEnv() 사용.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] examples — domestic_market_op (Phase 4.2 4 메서드 시연)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:36:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d96d54b8892840fc141bd4ee5c2bd503909d85cf",
          "body": "FHKST130000C0. FID_COND_SCR_DIV_CODE=\"11300\" hardcoded.\noutput array 17 fields/item. decimal/int64/float64 typed.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] EP7 InquireCaptureUplowprice — 상하한가 포착 (Phase 4.2)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:33:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e644115c2c17bcfae99844fb7a6851beae640e78",
          "body": "FHPST01390000. FID_COND_SCR_DIV_CODE=\"20139\" hardcoded.\noutput 단일 Object (13 fields). KIS 문서 \"30건\" 언급으로 runtime 배열 가능성\nstruct 주석에 명기. decimal/float64/int64 typed.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] EP6 InquireViStatus — 변동성완화장치 현황 (Phase 4.2)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:32:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cd77229ec6928cba7a359dea57fc7eed19ee7e17",
          "body": "CTCA0903R. non-FID UPPERCASE params (BASS_DT/CTX_AREA_NK/CTX_AREA_FK).\noutput single object 6 string fields.\n1일 1회 호출 권장 주석 명기.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] EP5 InquireChkHoliday — 휴장일 조회 (Phase 4.2)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:29:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a671fed741f1f5392342ae66ee18f61acb876a8a",
          "body": "domestic/market_op.go 신규 생성. FHKST117300C0.\noutput1 array (9 fields). FID_COND_SCR_DIV_CODE=\"11173\" hardcoded.\nFID_INPUT_ISCD = 시장구분코드 (종목코드 아님: 0000/0001/1001/2001/4001).\nWebSocket 3 endpoints (H0STMKO0/H0NXMKO0/H0UNMKO0) 제외 사유 파일 상단 주석에 명기.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] EP4 InquireExpClosingPrice — 장마감 예상체결가 (Phase 4.2)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:28:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1f4abdd2e53a4d5af38e8ea69972b3b6e9341288",
          "body": "합성 JSON fixtures:\n- exp_closing_price_success.json (output1[] 9 fields, FID_COND_SCR_DIV_CODE=11173)\n- chk_holiday_success.json (output{} 6 string fields, non-FID UPPERCASE params)\n- vi_status_success.json (output{} 13 fields, VI 발동/해제)\n- capture_uplowprice_success.json (output[] 17 fields, 상하한가 포착)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[chore] testdata — 4 market-op fixture JSON (Phase 4.2)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:26:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f5795c2f23f486a32c01f7a10a3b4d56327e5403",
          "body": "…ods, v1.13.0)\n\n9 tasks: testdata 4 + 4 메서드 (InquireExpClosingPrice/InquireChkHoliday/\nInquireViStatus/InquireCaptureUplowprice) + example + docs + 최종점검 + PR.\n누적 89 → 93 메서드.\n\nCRITICAL DEVIATION: Phase 4 design spec §Phase 4.2 의 7 methods 중 3개\n(장운영정보 KRX/NXT/통합 — H0STMKO0/H0NXMKO0/H0UNMKO0) 는 WebSoc\n[…]\n 정책에 따라 Phase 4.2 = 4 REST\nmethods 만. Phase 4 total 30 → 27, Phase 4.2 종료 후 누적 93 메서드.\n\nWebSocket 3개는 향후 Phase 5 (WebSocket) 로 분리.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(superpowers): Phase 4.2 implementation plan (시장 특수상태 4 REST meth…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T11:24:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6f43c8ab69a96d006badd0289c79b7e1cd752859",
          "body": "Phase 4.1 — 국내주식 종목정보/분석 (v1.12.0)",
          "is_bot": false,
          "headline": "Merge pull request #143 from kenshin579/feat/phase4-1-stock-info",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T10:56:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c59d0fce63698456bfac6681686a3f79bfb74a8a",
          "body": "- CLAUDE.md: 배너 Phase 4.1/v1.12.0 으로 갱신, Phase 4 design/plan 링크 추가\n- README.md: Available Methods 헤딩 ~4.1, 10 메서드 행 추가 (79→89)\n- CHANGELOG.md: [1.12.0] 엔트리 추가 (10 메서드 + anomaly notes)\n- domestic/doc.go: Phase 4.1 섹션 추가 (opinion 3 + extended 7)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[docs] Phase 4.1 문서 갱신 (v1.12.0)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T00:30:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "744c1effc2ff7e68409355fc365a1a728a671fce",
          "body": "EP1-10: InquireInvestOpinion/Opbysec/EstimatePerform/VolumePower/\nBulkTransNum/TradprtByamt/HtsTopView/PbarTraRatio/ExpPriceTrend/\nExpTransUpdown — 실행 가능 예제 (go run ./examples/domestic_stock_info)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] examples — domestic_stock_info (Phase 4.1 10 메서드 시연)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T00:28:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b8f0426d7260a35a9379dd37086a2e298d52de16",
          "body": "output array 15 fields (stck_shrn_iscd/hts_kor_isnm/stck_prpr/prdy_vrss/sign/\nctrt/stck_sdpr/seln_rsqn/askp/bidp/shnu_rsqn/cntg_vol/antc_tr_pbmn/\ntotal_askp_rsqn/total_bidp_rsqn). lowercase fid_* query param wire keys\n(10 params). testdata fixture 의 잘못된 필드 (antc_cnpr/lstn_stcn/등) 를\nKIS docs 명시 필드로 정정.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireExpTransUpdown (예상체결 상승/하락 상위, FHPST01820000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T00:26:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f5c791f266cd33483257f7b87de22a85cb4c3323",
          "body": "dual output (output1 7 + output2 array 7 fields). lowercase fid_* query\nparam wire keys (Phase 2.7 EP8 패턴). testdata fixture output2 의 잘못된\n필드를 KIS docs 명시 필드로 정정 (stck_bsop_date/stck_cntg_hour/stck_prpr/\nprdy_vrss_sign/prdy_vrss/prdy_ctrt/acml_vol).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireExpPriceTrend (예상체결가 추이, FHPST01810000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T00:24:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a23fb85aaf8be3232ecd861def949ebc5bf7a166",
          "body": "dual output (output1 PbarTraRatioSummary 11 fields + output2 []PbarTraRatioItem\n4 fields). wghn_avrg_stck_prc (가중평균주식가격) + lstn_stcn (상장주수) 포함.\ntestdata fixture 의 잘못된 필드를 KIS docs 기준으로 정정.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquirePbarTraRatio (매물대 거래비중, FHPST01130000)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T00:23:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3668911eb8803ed5bedd269045846e8d46fe29a5",
          "body": "zero query params + output1 (not output) 응답 구조 anomaly 처리.\nHHMCM prefix TR_ID (HH 시리즈). InquireHtsTopViewParams 빈 struct.\ntestdata fixture 의 잘못된 필드 (stck_shrn_iscd/hts_kor_isnm) 를 KIS docs\n명시 필드 (mrkt_div_cls_code/mksc_shrn_iscd) 로 정정.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic — InquireHtsTopView (HTS조회상위20종목, HHMCM000100C0)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-07T00:21:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4f614ce4fa2e6e2ad136d702cd306d05964cdf61",
          "body": "체결금액별 매매비중 조회 (FHKST111900C0). output[] 11 fields.\nwhol_shun_vol_rate KIS wire format typo 의도적 보존.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/extended.go — InquireTradprtByamt (EP6, Phase 4.1)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T18:18:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b3ce98644f1b90732a543a6821348e0236ca6c97",
          "body": "대량체결건수 상위 조회 (FHKST190900C0). output[] 11 fields.\nlowercase fid_* anomaly + mksc_shrn_iscd (not stck_shrn_iscd) 반영.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/extended.go — InquireBulkTransNum (EP5, Phase 4.1)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T18:17:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e2f73d241d493de8396cbb5a8e41e8fc7ced4632",
          "body": "체결강도 상위 조회 (FHPST01680000). output[] 11 fields.\n모든 9개 query params lowercase fid_* anomaly 반영.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/extended.go — InquireVolumePower (EP4, Phase 4.1)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T18:16:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "88565385fd86224a7384a9438c596f456e9b2d0b",
          "body": "종목 추정실적 조회 (HHKST668300C0). quad output 구조:\noutput1(요약 8fields) + output2(추정손익계산서 6행×5fields) +\noutput3(투자지표 8행×5fields) + output4(결산년월 5행×1field).\nSHT_CD 비표준 param명, KIS docs mislabeled output1 주의사항 문서화.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/opinion.go — InquireEstimatePerform (EP3, Phase 4.1)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T18:14:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8e4b00acc869aecab71eafce7f6e94ea61026958",
          "body": "증권사별 투자의견 조회 (FHKST663400C0). output[] 16 fields.\nFID_INPUT_ISCD = 증권사코드 (종목코드 아님) 주의사항 문서화.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/opinion.go — InquireInvestOpbysec (EP2, Phase 4.1)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T18:12:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aee5c91f7fbcd994f1f60382557441feaf9f497d",
          "body": "종목투자의견 조회 (FHKST663300C0). output[] 12 fields.\n날짜 범위 페이지네이션 파라미터 지원 (FID_INPUT_DATE_1/2).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] domestic/opinion.go — InquireInvestOpinion (EP1, Phase 4.1)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T18:11:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9aa381e1462639cbfd5600036e38460958564dac",
          "body": "합성 JSON fixtures (2 records each where applicable):\n- invest_opinion_success.json (output[] 12 fields, date-range)\n- invest_opbysec_success.json (output[] 16 fields, 증권사코드)\n- estimate_perform_success.json (quad output1/2/3/4, SHT_CD param)\n- volume_power_success.json (output[] 11 fields, lowercase f\n[…]\n_price_trend_success.json (output1{} 7 + output2[] 7 fields)\n- exp_trans_updown_success.json (output[] 15 fields, lowercase fid_*)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[chore] testdata — 10 stock-info fixture JSON (Phase 4.1)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T18:09:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce44e1df30d037f39758c300c54a2e462d7112a2",
          "body": "…, v1.12.0)\n\n15 tasks: testdata 10 + 10 메서드 + example + docs + 최종점검 + PR.\n누적 79 → 89 메서드.\n\n11 anomaly 식별:\n- EP3 quad-output (output1+2+3+4) + non-FID SHT_CD param + HH prefix TR_ID\n- EP3 docs Korean labels mislabeled (Python dataclass field names 사용)\n- EP4/5/9/10 lowercase fid_* wire keys\n- EP5 mksc\n[…]\n)\n- EP6 whol_shun_vol_rate typo verbatim 보존\n- EP7 zero query params + output1 (NOT output)\n- EP2 FID_INPUT_ISCD = 증권사코드 (NOT 종목코드)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(superpowers): Phase 4.1 implementation plan (국내주식 종목정보/분석 10 메서드…",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T18:06:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7e73ecd2e7be633eea3100530d366cbaa52c16a0",
          "body": "Phase 1+2+2.5+ 에서 누락된 niche read-only 30 메서드. 3 sub-phase 분해:\n- Phase 4.1 (v1.12.0, 10): 종목정보/분석 (투자의견/체결/예상체결)\n- Phase 4.2 (v1.13.0, 7): 시장운영/특수상태 (장운영/VI/상하한가/휴장일)\n- Phase 4.3 (v1.14.0, 13): 추가 ranking/흐름 (공매도/신용잔고/순위/시장자금)\n\n기존 domestic/ 패키지 재사용. 신규 file: opinion.go, market_op.go.\nextended.go 에 Phase 4.1/4.3 누적. 누적 79 → 109 메서드.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(superpowers): Phase 4 design spec — 국내주식 시장정보/순위 read-only",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T17:53:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c5f63b1a2c17e874b207ae896fe745a30a35d505",
          "body": "Phase 3.1 — 장내채권 시세 (v1.11.0) [신규 bonds 도메인]",
          "is_bot": false,
          "headline": "Merge pull request #142 from kenshin579/feat/phase3-1-bonds-quote",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T17:40:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74e671bd8dc9f9cdc16db676693fff4f0824c835",
          "body": "SearchBondInfo/InquireIssueInfo/InquirePrice/InquireCcnl/InquireAskingPrice/\nInquireDailyPrice/InquireDailyItemchartprice/InquireAvgUnit 의 JSON unmarshal\nerror path coverage 보강. bonds 패키지 68.7% → 88.1%.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[test] bonds — Phase 3.1 8 메서드 unmarshal error path 검증",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T08:57:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aafde7cd0f1302554f4acbf0597a17605e7fb1e6",
          "body": "CLAUDE.md 배너 갱신 + Phase 3 링크 추가.\nREADME.md 헤딩/카운트 갱신 + Bonds 섹션 추가.\nCHANGELOG.md v1.11.0 항목 추가.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[docs] Phase 3.1 문서 갱신 (v1.11.0, 신규 bonds 도메인)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T08:56:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6e5122c98275d3ca41fc41230b379a65e9dd31c8",
          "body": "examples/bonds_quote/main.go: EP1~EP8 전체 호출 시연.\nKR103501GCC7 예시 채권코드 사용. build OK 확인.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] examples — bonds_quote (Phase 3.1 8 메서드 시연)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T08:54:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "756a27e0fc821d58c4adf4235aab9a346f9740b9",
          "body": "EP8: multi-output (output1/output2/output3) 23+10+16 fields.\nCTX_AREA_NK30/CTX_AREA_FK100 cursor pagination params 노출.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] bonds — InquireAvgUnit (장내채권 평균단가조회, CTPF2005R)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T08:51:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "017c9d5f5f66452c0dfb01532abe45fb3da8c21d",
          "body": "EP7: []DailyItemchartpriceItem array (6 fields/item, max 30 records).\nMirrors InquireDailyPrice pattern with array output shape.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] bonds — InquireDailyItemchartprice (장내채권 기간별 시세, FHKBJ773701C0)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T08:49:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4d671a8c9e8430d8898e9f27255ebaa98c0ee5e5",
          "body": "채권 현재가 일별 시세 — typed struct + method + test.\nKIS docs output{} 준수; 실제 API array 시 patch 예정.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] bonds: InquireDailyPrice EP6 (FHKBJ773404C0, 9 fields typed)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T08:46:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5982f1c002c4886ddb5300e1cc4e8a445d0397c1",
          "body": "채권 5단계 호가 — decimal askp/bidp, int64 잔량, float64 수익률 typed struct + method + test.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] bonds: InquireAskingPrice EP5 (FHKBJ773401C0, 34 fields, 5단계 호가)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T08:45:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59a44ddb8b0547ddc559748f6f774096e602b404",
          "body": "채권 현재가 체결 단일 스냅샷 — typed struct + method + test.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[feat] bonds: InquireCcnl EP4 (FHKBJ773403C0, 7 fields typed)",
          "author_name": "Frank Oh",
          "author_login": "kenshin579",
          "committed_at": "2026-05-06T08:44:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 45,
      "commits_last_year": 485,
      "latest_release_at": "2026-07-19T04:06:33Z",
      "latest_release_tag": "v1.29.0",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 15,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 7.9
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/kenshin579/korea-investment-stock",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/kenshin579/korea-investment-stock",
          "is_deprecated": false,
          "latest_version": "v1.29.0",
          "repository_url": "https://github.com/kenshin579/korea-investment-stock",
          "versions_count": 52,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T04:06:01Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "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": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 106698,
      "source_files_sampled": 204,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 8174
    },
    "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/alicebob/miniredis/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.37.0"
        },
        {
          "name": "github.com/coder/websocket",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.14"
        },
        {
          "name": "github.com/go-resty/resty/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.17.2"
        },
        {
          "name": "github.com/jarcoal/httpmock",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.1"
        },
        {
          "name": "github.com/redis/go-redis/v9",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v9.19.0"
        },
        {
          "name": "github.com/shopspring/decimal",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.0"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.20.0"
        },
        {
          "name": "golang.org/x/text",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.36.0"
        },
        {
          "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": 122,
        "open_issues": 1,
        "closed_ratio": 0.974,
        "closed_issues": 37,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "kenshin579",
          "commits": 561,
          "avatar_url": "https://avatars.githubusercontent.com/u/1477631?v=4"
        },
        {
          "type": "User",
          "login": "brayden-jo",
          "commits": 76,
          "avatar_url": "https://avatars.githubusercontent.com/u/23475470?v=4"
        },
        {
          "type": "User",
          "login": "mr-yoo",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/29349211?v=4"
        },
        {
          "type": "User",
          "login": "azki",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/253638?v=4"
        },
        {
          "type": "User",
          "login": "sharebook-kr",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/34187310?v=4"
        },
        {
          "type": "User",
          "login": "dalinaum",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/145585?v=4"
        },
        {
          "type": "User",
          "login": "forcecore",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/632278?v=4"
        },
        {
          "type": "User",
          "login": "jackmappotion",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/131565091?v=4"
        }
      ],
      "contributors_sampled": 8,
      "top_contributor_share": 0.863
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "label-merge-conflict.yml",
        "release.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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 13 merged PRs checked by a CI test -- score normalized to 0",
            "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/13 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 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": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "11 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "7bca3253b10e72c0e5088bf3f695a46873e76074",
        "ran_at": "2026-07-25T19:31:26Z",
        "aggregate_score": 3.3,
        "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-19T04:06:03Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-19T04:06:02Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 124,
          "created_at": "2026-02-14T22:49:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/kenshin579/korea-investment-stock",
    "host": "github.com",
    "name": "korea-investment-stock",
    "owner": "kenshin579"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 50,
      "inputs": {
        "security": 33,
        "vitality": 84,
        "community": 12,
        "governance": 64,
        "engineering": 43
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "commits_last_year": 485,
              "human_commit_share": 1,
              "days_since_last_push": 6,
              "active_weeks_last_year": 15
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "15/52 weeks with commits",
                "points": 10.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 15
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "485 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 485
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 45,
              "latest_release_tag": "v1.29.0",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 7.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "45 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 45
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~7.9 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 7.9
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 6,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 6 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 12,
        "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": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 64,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 8,
              "top_contributor_share": 0.863
            },
            "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 86% of commits",
                "points": 3.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 86
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "8 contributors",
                "points": 10.8,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "merged_prs": 122,
              "open_issues": 1,
              "closed_issues": 37,
              "issue_closed_ratio": 0.974,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "97% of issues closed",
                "points": 45.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "122/123 decided PRs merged",
                "points": 37.9,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 122,
                      "decided": 123
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/13 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "followers": 61,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "kenshin579",
              "public_repos": 372,
              "account_age_days": 5262
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "61 followers of kenshin579",
                "points": 12.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 61,
                      "login": "kenshin579"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "372 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 372
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/kenshin579/korea-investment-stock"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "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 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "52 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 52
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Engineering Quality",
        "value": 43,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 48,
            "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": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 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": "0 out of 13 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 33,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 33,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 3.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 13 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/13 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "11 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 8
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 73,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.79,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 8174
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "79 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 79,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.83,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "83 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 83,
                      "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": 106698,
              "source_files_sampled": 204,
              "oversized_source_files": 1
            },
            "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": "1/204 source files over 60KB",
                "points": 54.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 204,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Community profile unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T19:31:43.634389Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/kenshin579/korea-investment-stock.svg",
  "full_name": "kenshin579/korea-investment-stock",
  "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.