Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-24 03:23 UTC

oyc0401 / maple-auction-mcp

메이플 경매장 mcp

TypeScriptMIT★ 11 stars⑂ 5 forkssince Jul 2026View on GitHub ↗

oyc0401/maple-auction-mcp holds a health index of 46 out of 100, placing it in the At risk band. It scores highest on Engineering Quality (78/100) and lowest on Security (27/100). It was last updated 5 days ago. A single contributor accounts for most of its recent work.

46
overall / 100
At risk

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

46
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

yuchanPersonal account
59 followers40 public repossince Nov 2020Inha University

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
npmmaple-auction-mcp0.8.13,185165 days ago

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

34At risk · 22% of overall
How it's scored
36/36Push recency — last push 5 days ago
2.1/36Commit cadence — 3/52 weeks with commits
18/18Commit volume — 163 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year163
human_commit_share1
days_since_last_push5
active_weeks_last_year3
How it's scored
0/27Ships releases — no releases published
0/36Release recency — no releases
0/27Release cadence — no releases
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count0
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

47At risk · 18% of overall
How it's scored
16.2/60Stars — 11 stars
5/25Forks — 5 forks
0/15Watchers — 0 watchers
Inputs used
forks5
stars11
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
How it's scored
46.7/80Monthly downloads — 3,185 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesmaple-auction-mcp
dependents
ecosystemsnpm
total_downloads
monthly_downloads3,185
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

44At risk · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.1/22.5Commit distribution — top contributor authored 99% of commits
2.7/13.5Contributor breadth — 2 contributors
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Inputs used
bus_factor1
contributors_sampled2
top_contributor_share0.994
How it's scored
0/46.8Issue resolution — no issues or no data
6.4/38.3PR acceptance — 1/6 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs1
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs5
Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
12.8/25Owner reach — 59 followers of oyc0401
23.2/25Track record — 40 public repos, account ~5 yr old
Inputs used
followers59
owner_typeUser
is_verified
owner_loginoyc0401
public_repos40
account_age_days2,087
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 5 days ago
20/20Version history — 16 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesmaple-auction-mcp
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Engineering Quality

Are baseline engineering and documentation practices in place?

78Good · 20% of overall
How it's scored
24/24CI workflows — 1 workflow(s)
24/24Tests present
16/16Linter config — biome.json
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

27Critical · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — no data
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 3 contributing companies or organizations -- score normalized to 10
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.5License — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
2.2/7.5Vulnerabilities — 7 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate2.8
Excluded from scoring (no data or not applicable): ci_tests, packaging, signed_releases. Remaining weights renormalized.

AI Readiness

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.

62Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 98 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.98
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
11/11Lint / format config — biome.json
11/11Static type checking — extension/tsconfig.json, server/tsconfig.json, shared/tsconfig.json
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 81 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilespnpm-lock.yaml
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configsextension/tsconfig.json, server/tsconfig.json, shared/tsconfig.json
agent_commit_share0.81
toolchain_manifests
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
54.5/55Manageable file sizes — 1/102 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes113,671
source_files_sampled102
oversized_source_files1

Key facts

11GitHub stars
2contributors
163commits, last 12 months
5days since last push
0releases
1bus factor
0open issues
npmpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package '@maple/shared' from its registry
  • Could not fetch npm package '@maple/extension' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:maple-auction-mcp@0.8.1; advisories assessed against the repository dependency graph instead

More detail

Star and fork history 0 ★ / 5 ⇿
0Stars
5Forks

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

12345532026-072026-072026-07
OpenSSF Scorecard 2.8 / 10
2.8aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-24 03:23 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
3Vulnerabilities7 existing vulnerabilities detected
Direct dependencies 1
RegistryPackageVersion constraintManifest
npm@maple/sharedworkspace:*extension/package.json
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1075,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "JavaScript": 1140,
        "TypeScript": 501805
      },
      "pushed_at": "2026-07-18T17:34:34Z",
      "created_at": "2026-07-07T15:41:43Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T17:16:13Z",
      "description": "메이플 경매장 mcp",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "rokafmail.kr",
      "name": "yuchan",
      "type": "User",
      "login": "oyc0401",
      "company": "Inha University",
      "location": null,
      "followers": 59,
      "avatar_url": "https://avatars.githubusercontent.com/u/73932179?v=4",
      "created_at": "2020-11-04T08:00:40Z",
      "is_verified": null,
      "public_repos": 40,
      "account_age_days": 2087
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "d01119598479225946c3a7defa9be6f2f1b93295",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(server): v0.8.1",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-18T17:34:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "82b3b2c64f434c608255be2330db0c5c6ccf0787",
          "body": "README·MCP 안내 문구(NEXON_KEY_GUIDE, get_status degradedResults, 서버\n인스트럭션)에 '개발 모드 기능 — 보려면 넥슨 API 키를 함께 넣어 설치'\n프레이밍 추가.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme)+feat(server): 최종 데미지 증감률을 개발 모드 기능으로 명시",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-18T17:33:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4dfe59aafefe19fde3af6015504a624f14b8edc3",
          "body": "랭커 스킬 이펙트(넥슨 API) 기반 자동 생성. 하이퍼 액티브·일격필살은\n기존 컨벤션대로 전 직업 제외(확정 가정에 명문화), 메이플 용사 전역\n테이블에 데몬어벤져 변형·마스테리아의 용사(레테) 추가.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(skill-db): 스킬 패시브 25직업 확장 — job-example 전 직업(48) 커버",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-17T07:05:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd8946de60dd649af86a863b32a79665e0e1e0c9",
          "body": "세션이 다른 크롬 프로필로 옮겨가면 브로커의 preferred가 죽은 세션의\n확장만 두드리는 갇힘이 있었다(identity 캐시로 fanout 재실행 계기 없음).\nMapleAuctionApi의 단일 관문 send()에서 401이면 읽기 전용 /accounts를\nfanout으로 뿌려 로그인된 확장을 preferred로 재고정한 뒤 원 요청을 1회\n재시도한다. 실패한 요청 자체는 fanout하지 않는다 — 소진성 POST·쓰기가\n확장 수만큼 복제되기 때문. 프로브까지 실패하면 원래 에러를 반환해\n기존 NO_SESSION_MSG 안내 흐름을 탄다.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 세션 죽음(401) 시 fanout 프로브로 1회 자가복구",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-16T19:27:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "762541ba551760a7fdfe25a65c675d31e049d022",
          "body": "익스텐션 상호작용(와이어 계층)을 src/broker/로 이동해 auction과의\n상호 의존을 제거. 유일한 결합점이던 DISCONNECTED_MSG는 양쪽이 이미\n의존하는 @maple/shared로 이동 (protocolMismatchMsg 옆).\n의존 방향: auction/ ← index.ts → broker/, 공유는 shared만.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): 브릿지·브로커를 auction에서 broker 모듈로 분리",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-16T19:24:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a8610ad3659071e943fdd785dabed81e343831bf",
          "body": null,
          "is_bot": false,
          "headline": "fix: normalize existing job skill stats",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-16T17:02:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb5e71d15c42bdf8a0fd18659f23a6dbe9206d74",
          "body": null,
          "is_bot": false,
          "headline": "refactor(server): 경매장 API 의존성을 auction 모듈로 모으기",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-16T15:44:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c559718338a1763fc5560210ba81a7ed6fb2c01",
          "body": "파생값을 캐시하면 무효화 조건이 \"넥슨이 API를 바꿨을 때\"가 아니라 \"우리가\n파생 로직을 바꿨을 때\"가 된다. 실제로 1588965가 캐시한 건 getCharacterStats의\n출력이었고, 092b8b8에서 CharacterStats 모양이 바뀌자 넥슨 쪽은 그대로인데도\nversion을 2로 올려 전 유저 캐시를 폐기하고 캐릭터당 23콜을 다시 받게 했다.\n데미지 엔진을 계속 손보는 중이라 이건 재발한다.\n\n캐시 키를 요청 URL(엔드포인트 + ocid 등 파라미터)로 바꿔 응답 원본을 저장한다.\n넥슨이 응답 스키마를 바꿀 때\n[…]\nient.ts를 타는 모든 호출에 걸리게 되면서 클라이언트 테스트가 실제\n사용자 캐시 디렉터리에 쓰고 구 캐시 삭제까지 돌게 됐다. vitest.setup.ts가\nMAPLE_AUCTION_DATA_DIR를 임시 경로로 잡아 격리한다.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): 넥슨 캐시를 캐릭터 스냅샷에서 API 응답 원본으로 바꾸기",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T22:44:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c565bbeda3252fd1bc7bea3174647715fc856e95",
          "body": "configured=false만으로는 뭐가 나빠지는지 알 수 없어 AI가 그냥 지나쳤다.\n키 없이 돌아가면 최종 데미지 증감률이 결과에서 통째로 빠지고, 그 자리를\n전투력으로 대신하면 방무를 반영하지 않는 공식 탓에 방무 매물이 저평가된다.\n이 왜곡을 degradedResults로 명시한다.\n\n안내문도 주체 없는 \"--api-key를 추가하세요\"에서, 사용자가 직접 해야 하는\n유저 스코프 재등록 명령(claude mcp add --scope user)으로 바꾼다.\nget_status의 note와 검색 결과의 finalDamageNote가 같은 문구를 쓴다.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(server): 넥슨 API 키 미설정 안내를 유저 스코프 재등록 기준으로 고치기",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T22:19:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a392df97d54681dcc6fe01cf2ebb8fee9b7df048",
          "body": "dmgSimulatorPayload.ts와 요청·응답 덤프들은 스카우터 경유 구현을 실측할 때\n쓰던 것으로 지금은 어디서도 import되지 않는다. item.json도 매물 타입을 쓰면서\n역할이 끝났다.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(server): 안 쓰는 scouter 덤프와 시뮬레이터 페이로드 제거",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T21:56:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "abd4ecf0c355b120d5c7d1c466babc76eec8fefd",
          "body": "mapping·service·summarize·매물 타입이 src 루트와 type/에 흩어져 있어\n경매장 관련 코드를 찾으려면 파일명으로 짐작해야 했다. src/auction/으로 모으고\ntype/auctionItem.ts는 auction/item.ts로 옮긴다.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): 경매장 코드를 auction 모듈로 모으기",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T21:56:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a3aa19a668f127e7cc7b86e9db3ad2209e7c9819",
          "body": null,
          "is_bot": false,
          "headline": "refactor(server): model auction item responses",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T21:51:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3dc9a8bc47e15ae5b01911bdaf8c563cf2389533",
          "body": "부위를 검색 필터(params.category)로 정하던 탓에, 이름만으로 검색하거나\n상위 카테고리(WEAPON)로 검색하면 슬롯을 못 정하고 증감률이 통째로 빠졌다.\n이제 매물의 toolTip.categories만 본다 — 실측한 값이라 건틀릿도 무기로,\n방패도 보조무기로 스스로 말한다.\n\n착용 판정도 같은 원칙으로 매물 JSON에서만 한다. reqJob은 직업군까지만\n말하고 같은 직업군 안의 예외는 unwearableJobNames가 따로 주므로 둘 다 본다.\n카데나에게 마법사 스태프가 +26%로 뜨던 버그가 여기서 났다.\n\n직업군 DB(48개)는 넥슨 character_class 표기를 키로 쓴다. 주스탯과는 별개다\n— 은월·아크는 STR이지만 해적, 렌은 DEX지만 전사.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(damage): decide slot and wearability from item json",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T21:35:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "092b8b8150fa917522619e3592ef8b46de3c14ac",
          "body": "캐시장비를 StatBlock 하나로 합산하면 교체 계산에서 기존 캐시 옵션을\n정확히 뺄 수 없다. 슬롯별 EquippedItem으로 보관한다.\n\n스냅샷 캐시는 이 모양 변경 때문에 version 2로 올린다.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(damage): track cash gear per slot and add 한벌옷 slot",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T21:35:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "15889658b0af45d75e673bfb3056fc86c2d08444",
          "body": null,
          "is_bot": false,
          "headline": "feat(server): persist and refresh character snapshots",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T20:04:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd080223b116926fb5624a3cf1e6c75a66f6ef70",
          "body": null,
          "is_bot": false,
          "headline": "feat(server): include damage changes in auction results",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T19:22:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "399eb3d636b0319c170aa2a14145f01940beb8aa",
          "body": null,
          "is_bot": false,
          "headline": "refactor(server): keep equipment names with stats",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T18:48:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41daa48b5e2a88ea329f67a4e0689b63ea5a06ef",
          "body": null,
          "is_bot": false,
          "headline": "feat(damage): simulate equipment replacement",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T18:18:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70396285227bbe1976b76f619086806abd35ab6e",
          "body": null,
          "is_bot": false,
          "headline": "feat(damage): calculate final damage change rate",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T17:23:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "208f210d62b7957c90fb30bf6655865a251acb9b",
          "body": null,
          "is_bot": false,
          "headline": "feat(damage): collect gear and set stats",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T12:37:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df90c324b9392882142ae5cec94f440fc2450aed",
          "body": "- 공격 시 확률 발동 데미지는 가동률 기대값으로 합산\n- \"증가\" 생략된 라인(HP 복합 등) 파싱 허용\n- lecture/node 디렉토리 gitignore\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(damage): effect-lines 파서 확률 데미지·증가 생략 케이스 대응",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-15T11:38:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8c329c7ae0037f634334037c4ee77ffa27e55437",
          "body": null,
          "is_bot": false,
          "headline": "feat(damage): collect AP and hexa stats",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-14T15:49:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e830d45bfee23f851a4aa6a322b21ea326077e4f",
          "body": null,
          "is_bot": false,
          "headline": "refactor(damage): split effect line parser",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-14T14:42:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27110fbd8c29920f557a7e4e1c57655d5056f017",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(damage): hwansan2 레거시 제거, setDb를 damage로 이관",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-14T12:47:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "80c673b08429315512f65b93742b1f8b188c6ca5",
          "body": "- getGear: 부위별 StatBlock. item_total_option 깡스탯 + 잠재·소울 %줄 파싱,\n  레벨당 옵션 환산, 칭호 효과 포함. 슬롯명 공백 제거로 GearStats 키 매핑.\n- getSet: 활성 카운트 이하 티어 누산(증분 포맷), 보스셋 부위 상한, 콜론형 방무 반영.\n- getAP: final_stat의 'AP 배분 *' 주스탯 추출.\n- 잠재/세트 '이름 +N(%)' 줄은 퍼/깡이 이름을 공유해 템플릿 DB로 불가 →\n  레거시 apply/accumPlus를 StatBlock 출력으로 계승(stat/gear.ts).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(damage): characterStats 잔여 3종 구현(장비·세트·AP)",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-14T12:45:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "960500043bc60a2459663ec2af09973acad85b8f",
          "body": "- getSkill: parseSkillGrade 헬퍼 추출, JOB_RULES로 직업별 등급 룰 적용\n- getGuild: 길드+노블레스 상시 패시브만 반영, 버프 제외\n- getLink: 활성·보유 링크스킬 변환, 직업 접미 제거\n- characterStats: 미완 TODO 3종 실구현으로 교체\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(damage): 스킬 패시브·길드·링크 스탯 소스 구현",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-14T12:37:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "458ae3e2006fb07fa3b0f8bdf034d66dcfb17141",
          "body": "- getArtifact/getAbility: 값이 박힌 효과 문자열을 템플릿 파싱(레거시 noPct=false → 주스탯 %적용)\n- 유니온 분리: union_raider(배치=미적용) + union_state(점령=%적용)\n  · nexon fetch와 충돌 → getUnionRaider as fetchUnionRaider alias\n  · ALLSTAT·\"STR,DEX,LUK N\"·\"공격력 N, 마력 N\"·최대 HP 폼 처리\n- getHexaStat: hexaStat-db 값표 + job.ts 직업판정(일반=주스탯/제논=올스탯\n[…]\nE.md: 넥슨 API 5초 간격/1시간 락아웃 경고\n- 실측 문자열 유닛테스트(티엘·오유찬·렌), biome 포맷 정리\n\n권위 근거: 삭제된 레거시 collect.ts/parse.ts/hexaStat.ts의 소스별 미적용 분류 복원\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(damage): 스탯 소스 4종 구현(어빌리티·아티팩트·유니온·헥사) + 직업 메타·공용 파서 헬퍼",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-14T08:40:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f01e9e8f3caeb0cfae3f075c718b32f01c5b44ab",
          "body": "- 하이퍼·챔피언: template-parser 기반. 하이퍼는 stat_type별 템플릿(hyper-db),\n  챔피언은 평면 템플릿(champion-db)을 뱃지 문자열에 훑음.\n- 심볼·성향·캐시: \"증가\" 문자열이 아닌 정형 숫자 필드라 직접 변환(파서 불필요).\n- template-parser에 ${STR미적용} 등 미적용 플레이스홀더 추가 — 하이퍼 주스탯 미적용行 표현용.\n- 도메인별 파일 분리(symbol/propensity/hyper/champion/cash) + 도메인별 테스트.\n- 검증 안 되는 잔차 추적 문서(\n[…]\n, 파생 사실을 프로즈로 중복하면 조용히 틀린다\n  (예: '통찰력→크확'은 크확 잔차를 메우려 지어낸 허구 소스였음. 통찰력은 속성내성무시).\n\n검증: 5종 모두 실덤프(.nexon-raw-*.json) 대조로 이전 구현과 동일 출력. 28 테스트 통과.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(damage): 스탯 소스 5종 구현(심볼·성향·하이퍼·챔피언·캐시) + 잔차 문서 정리",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T22:38:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a822a84cc076f5c28159f7e512c80abcb56f75cc",
          "body": "- Add @biomejs/biome with lint/format/check scripts and biome.json\n  (single quotes, 2-space, es5 trailing commas); un-ignore biome.json\n- Implement getSkill0 to parse 0차 COMMON passives from skill effects\n- Mark not-yet-implemented characterStats getters with // 미완\n- Extend skill stat tests\n\nStat tests 18/18 pass.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: add Biome tooling and implement getSkill0",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T14:30:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "54126979822408b79afa175264546b1978b13dbf",
          "body": "Mark each job rule as human-verified (// 검증 <id> <date>) or\nAPI-derived (// api보고 자동생성). 카데나·렌 are 실측 검증;\n나머지는 넥슨 API 스킬 이펙트에서 자동 생성.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(skill-db): annotate JOB_RULES provenance",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T14:29:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "153692d26553eec58e08ce120f813946bdb2db94",
          "body": "Port PR #6 (oyc0401/maple-auction-mcp#6) into the current stat pipeline.\nThe PR targeted skill-job.ts, which was renamed to skill-db.ts during the\nparsing refactor, so the REN data is re-applied to the new structure.\n\n- 1~4차 상시 패시브: 청허심경 I~IV(합산), 장검/고급 장검 숙련, 신체 단련, 진안\n- 5차: 쓸만한 샤프 아이즈 / 어드밴스드 블레스\n- MapleJob.렌 + JOB_RULES 등록\n\nVerified against Tr1angle(렌, Lv276) 실측; stat tests 18/18 pass.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(skill-db): add REN (렌) job passive templates",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T14:26:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ab84b133635d9913bb7b59af9213c33e3cbb0b3c",
          "body": null,
          "is_bot": false,
          "headline": "feat(server): parse special skill effects",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T14:19:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fbacb2394bf577e2140442762a9d67c91a545fa",
          "body": null,
          "is_bot": false,
          "headline": "refactor(server): prepare Maple stat parsing pipeline",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T14:01:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d974370cc4b16d308be065013865a86a2c908dbf",
          "body": null,
          "is_bot": false,
          "headline": "refactor(server): reshape character skill stats",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T13:33:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba359d1052bf9b52d4674a575eea432937c58b34",
          "body": null,
          "is_bot": false,
          "headline": "refactor(server): remove legacy damage pipeline",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T13:06:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b361d393313ac637e6785ac5b3770365abe0a84",
          "body": null,
          "is_bot": false,
          "headline": "refactor(server): reorganize damage and Nexon API code",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T12:57:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd71654e654cdd0f2124ac634955eb164424d9ce",
          "body": "- skill-job.ts: 키네시스·나이트로드·카이저·비숍·히어로·아델·에반·제로 추가(총 170 템플릿)\n  - 실제 Nexon API skill_effect와 1:1 substring 검증(랭커 10명 실측)\n  - 조건부·액티브 버프 \"일단 전부 반영\"(추후 가동률 재논의) — 하단 ⚠️ 주의사항 11항목 주석\n  - 메용류(AP투자 능력치) 제외, 적 디버프 라인 제외, 공/마·힘 브래킷 포함\n  - template 맵에 공격력퍼/마력퍼 추가\n- linkskill-db.ts: 륀느의 축복·아이언 윌 등 전직업 링크스킬 커버(퍼미에이트·데들리 인스팅트 미검증 표기)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 스킬 패시브 8직업 확장 + 링크스킬 전직업 커버",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T09:52:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4654758c30d1fb467f2daf8d79b2055945283ab2",
          "body": "- linkskill-db.ts 신규: 링크스킬 20종을 템플릿(${키}+mul)으로, 실측 skill_effect와 1:1 정합\n  - 무아 base는 mul-1 라인으로 표현, 노블레스/이네이트/자연의 벗/어드벤쳐러 큐리어스 실측 확인\n- skill-job.ts: COMMON '5'의 쓸만한 2종을 직업별로 이관(보마는 진짜 샤프 보유→쓸샤 제외)\n  → 파서의 '쓸만한' owned-skip 분기 제거 가능\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 링크스킬 템플릿 DB 추가 + 쓸만한 스킬 직업별 이관",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-13T02:37:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b85ec6550e8c74780bd0e66088e3278439b7847b",
          "body": "- JobRules: picks 구조 → 템플릿 문자열(${맵키})로 전환, 실측 skill_effect 부분문자열과 1:1 정합\n- SkillTemplate = string | {template, mul} — mul로 스택/가동률 배수 표현\n- 위크포인트 컨버징(mul:5)·웨폰 버라이어티 Ⅲ(mul:8) 반영, 하위차수(위크포인트 어택) 제거\n- MapleJob 문자열 enum 도입, JOB_RULES 키를 enum으로\n- skill.ts는 신규 파서 시그니처 스텁으로 축소(구현 대기)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): 스킬 패시브를 템플릿 문자열 포맷으로 전환 — 스택 배수·차수 정리",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T21:44:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "500430c8b4fcf32a11d9919f3e941f7b1f24ac41",
          "body": "'LUK%' 같은 특수문자 키를 LUK퍼 형식 식별자로 통일. block/delta의\n동적 키 생성(${k}%)과 테스트 동기화. constants·summarize의\n%는 경매장 표기용이라 유지.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): StatBlock % 접미 키를 '퍼'로 변경 — MapleStat enum 추가 포함",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T15:06:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1fdfe625078668df36bea86cb9c8cc0d65d10b70",
          "body": "리패치 실측: \"래피드 파이어-리인포스\"류는 대상 스킬명이 skill_name에만 있고\neffect는 \"데미지 30% 증가\"라 전역 스탯처럼 보인다 → 꽈숩노 데미지 +50·\n보공 +20 과잉 수집. 하이퍼는 명시 룰만 허용(0차 폴백은 유지).\n룰 테이블(COMMON·JOB_RULES) skill-job.ts 분리 마무리.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(server): 하이퍼 패시브 동적 폴백 금지 — 특정 스킬 강화의 전역 오수집 차단",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T14:31:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b0866597ea6d0a3b7b2aaba9ae0d54f0fdfa0772",
          "body": "- nexon.ts: character_skill_grade=hyperpassive 조회 추가, SkillEntry/\n  SkillsByGrade 타입을 API 소유자인 nexon으로 이동\n- stat/skill.ts: export는 getSkill 하나. 하이퍼 패시브도 룰+동적 폴백\n  대상(스킬_하이퍼) — GRADE_FIELD를 배열로 바꿔 인터페이스 필드 순서 유지\n- character.ts는 getSkill 직접 임포트 대신 characterStats.getCharacterStats\n  경유 — 스킬 파트의 진입점을 characterStats 한 곳으로\n- 구캐시엔 hyperpassive 키가 없어 잔차 3캐릭 완전 동일, 테스트 143 통과\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 하이퍼 패시브 수집 + skill.ts 단일 export·characterStats 경유로 의존 정리",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T14:25:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f4afccbf664ed0ce3e7b06cac4324cab977d6b2d",
          "body": "- getSkill(job, skills) → { 메이플용사, 크리티컬리인포스, 스킬_0차~5차 }\n  CharacterStats 필드명 그대로 반환 — 조립부는 스프레드로 얹기만 한다\n- skillPassive.ts 삭제: 룰(JOB_RULES)·펫세트·0차 동적 폴백·5차 브래킷·\n  blessSkip·메용% 파싱을 stat/skill.ts로 통합, 단건 재집계용\n  ownedOverride 주입 핵 제거(전체 목록을 내부에서 봄)\n- characterStats.ts: 조립 목표 모양 더미(파이프라인 미연결, 스킬 파트만 이관)\n- 잔차 3캐릭 리팩토링 전후 완전 동일(순수 이동), 테스트 143 통과\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): 스킬 패시브를 stat/skill.ts getSkill 단일 API로 추출",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T14:19:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cd066570e1b38c82dafb6ff2f72f2f7036bda217",
          "body": "- 주석은 빈 catch의 /* ignore */만 유지\n- cli.ts 기본 닉네임 하드코딩 제거 — 닉네임 인자 필수화\n- docs/captain-residuals.md 호칭 표현 정리\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): damage 모듈 주석 제거 — 도메인 설명·예외 노트·캐릭터명 정리",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T13:59:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "81cb8a2045cd6e4ea53350dc70bc13b132322f37",
          "body": "명시 룰·펫 세트에 안 걸린 0차 스킬의 능력치 증가 라인을 줄 단위로\n동적 파싱(달콤하담 공5마5 등 열거 불가한 이벤트 패시브). \"N분/초 동안\"\n지속버프 라인은 제외 — 3캐릭 실측에서 오검출 0건.\n\n결계의 핵 소환은 effect에 수치가 없고(아이템 등급·강화에 귀속, API 미노출)\n동적 파싱으로도 안 나오므로 캐릭별 하드코딩을 제거 — 잔차로 드러나는 게 맞다.\n\nCo-Authored-By: 이준서 <Jxx5o2@users.noreply.github.com>\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 0차 스킬 동적 폴백 — 룰 밖 상시 패시브 자동 수집, 결계의핵 하드코딩 제거",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T13:55:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f9214c72221356f3c98dcfb0d8c435e454de4754",
          "body": "링크 중첩(월드 내 서로 다른 모험가 해적 직업군 수)은 skill_level 합산으로\n표현되고 skill_effect가 그 레벨 기준 수치로 온다(꽈숩노 Lv2=\"힘 30\",\n티엘 어드벤쳐러 큐리어스 Lv6 교차 확인). 최대중첩 가정 하드코딩은 과다계상.\n구캐시(3중첩 끼워맞춤 스냅샷) 기준 주스탯 잔차는 깨지며, 캐시장비 포함\nrefetch에서 0으로 닫히는지 확인 예정(PR #5 검증 재현).\n\nCo-Authored-By: 이준서 <Jxx5o2@users.noreply.github.com>\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(server): 파이렛 블레스 mult:3 제거 — 중첩은 API skill_level/effect에 이미 반영",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T13:49:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bb21095a8ccc83431426b20d73301acf55e08c80",
          "body": "PR #5(캡틴 13/13 잔차 0)의 신규 소스를 CharacterStats 아키텍처로 포팅:\n- collectGuild: /guild/id→/guild/basic, 지속시간 없는 상시 패시브(노하우)만\n- collectCash: /character/cashitem-equipment 능력치 캐시장비(하이퍼 버닝 치장)\n- 결계의핵(단기 이벤트 0차 스킬 게이팅)·소비 불릿: 꽈숩노 실측 하드코딩,\n  캐릭별 값 상이 → 추후 config화 TODO\n- 여제/정령의 축복 중복 불가 — 공격력 높은 쪽 1개만(blessSkip, 유저\n[…]\n정\n\n구캐시 검증(꽈숩노): STR/DEX 잔차 -115/-1303 → 0. 남은 공/마 잔차는\n길드·캐시 미포함 구캐시 탓 — refetch 회귀는 다음 단계.\n\nCo-Authored-By: 이준서 <Jxx5o2@users.noreply.github.com>\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): PR #5 포팅 1/2 — 길드·캐시장비 조회, 결계의핵·불릿, 여제/정령 중복 배제",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T13:43:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "77241ef0381bea2f0d61f18f464dbc7a9d4070e7",
          "body": "- dmgSimulatorPayload.ts: maplescouter /api/calc/dmg-simulator 요청 바디\n  TS 타입(실측 두 샘플 shape 100% 일치, 문자열 수치는 number 표현)\n- fromScouter: 넥슨 재구성 없이 캡처된 userStat을 combat.ts 계산에 태움\n  (오유찬 골든 테스트 4건)\n- scouter 캡처 픽스처 갱신, server/src/scouter/ 신규 캡처는 gitignore\n  (dmgSimulatorPayload.ts는 소스라 -f 추적)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): scouter ScouterUserStat → CombatStats 직결 변환(fromScouter)",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T13:38:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6c281731a2d316d25df6d2905f7687bd4d382c91",
          "body": "- 링크·스킬 패시브의 조건부(cond) 분기 삭제 — 조건부 데미지는 추가뎀(statusDmg)으로 상시 반영\n- combat 이중 재집계 제거: buildCombatStats가 collected.userStat을 그대로 사용\n- 개발노트성 주석(캐릭터명·날짜·잔차 기록·이력 참조) 제거, 동작 설명만 남김\n- 심볼 flatNoPct 배치·인텐시브 인썰트 추가뎀 합산·크리인포 전환을 테스트로 검증\n- gen-example.ts 삭제\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): cond 개념 제거·주석 정리, 도메인 규칙을 테스트로 고정",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-12T00:18:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fa394e6e5042400f7dde9ae14726b65120f4ace0",
          "body": "… 전면 개편\n\n- block.ts 신설: StatBlock ↔ UserStat 변환 단일 통로 (toBlock/addBlock/negateBlock/flattenStats)\n- character.ts 신설: RawBundle → CharacterStats 조립 (gen-example 로직 승격 + combat 플래그)\n- aggregateCharacter: CharacterStats를 만들고 UserStat은 flatten으로 파생\n- delta.ts: ItemStats 자체 연산 제거 — 장착템은 stats.장비 블록 재사용, \n[…]\n뎀 35)를 기본 블록으로 이동, 크리인포는 stats.크리티컬리인포스(N%)로\n- 쓸만한 게이팅을 룰 적용에만 걸리게 보유 목록 주입 방식으로 보존 (5차 브래킷 패시브 유지)\n- 실캐릭 3명 재구성 잔차·전투 D 값 개편 전과 동일, 테스트 147개 통과\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): CharacterStats(stat-interface) 단일 진실 원천으로 damage 모듈…",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T22:58:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1aba034540c32aa9f944afb84e93d45b9a8afede",
          "body": "…% 반영\n\n- stat-interface.ts: 소스별 StatBlock 단일 진실 원천 (기본 크확 5 포함, AP·장비 부위별·세트별·스킬 차수별·링크별 분해)\n- gen-example.ts: .nexon-raw 캐시를 소스별 재집계해 CharacterStats 형태 example.json 생성 — 전 버킷 재집계 대조 + API 주스탯 잔차 0 검증 포함 (example.json 자체는 *.json ignore 유지)\n- linkSkill.ts: 인텐시브 인썰트에 '캐릭터보다 레벨이 낮은 몬스터' 라인 추가(상태이상 라인과 합산, 오유찬 Lv2 6+6=12) — 넥슨 상태이상 필드는 상태이상 라인만 집계라 resting 잔차 +6(오유찬)/+9(티엘)이 정상\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): CharacterStats 스탯 인터페이스 + example.json 생성기, 인텐시브 인썰트 12…",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T22:34:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "582ab998f3d4240984dd16bf1f5f8a7f8c5985b9",
          "body": "PR #4 후속. 만렙 상수 테이블(jobPassive.ts) 대신 skillPassive.ts JOB_RULES['캡틴']에서\nskill_effect 현재 수치를 파싱 — 스킬레벨 증가분이 자동 반영돼 꽈숩노 최종뎀이\n64.59 정확 일치(상수로는 -2.59 잔차). 크뎀도 -10 → -8.\n\n- skillPassive: Rule에 bracket 옵션 추가 — 액티브 본문의 조건부 수치(크루 커맨더십\n  크뎀 5%)를 건너뛰고 [패시브 효과] 브래킷(26%)에서만 뽑는다\n- linkSkill 파이렛 블레스: 힘·민첩·지력·운 4스\n[…]\nNT(팬텀 티어 캡)는 유지 — 중복 티어 텍스트가 정상 세트(칠흑·보장·광휘·\n  에테르넬)에도 흔해 일반화 규칙이 불가함을 3캐릭 캐시 스캔으로 확인\n- 검증: 꽈숩노 최종뎀·방무·보공·INT/LUK 잔차 0, 오유찬·티엘 회귀 없음, 테스트 147 통과\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): jobPassive 삭제 — 캡틴 패시브를 JOB_RULES 파싱 룰로 포팅, 최종뎀 잔차 0",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T21:03:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c06c6ccc6fa1a7dfd5d88a92878946484fc97e7",
          "body": "캡틴(챌린저스) 스탯 재구성 확장 — 11/13 항목 잔차 0 (미완)",
          "is_bot": false,
          "headline": "Merge pull request #4 from Jxx5o2/captain-recon",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T20:52:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76d8b22113cfc012297b7275768f54285d932afd",
          "body": "300/380 병기가 응답만 무겁게 하고 판단엔 380만 쓰여 delta380 하나로 정리.\nitem_damage 응답 deltaPct가 {slot: {boss300, boss380}} → {slot: number}로 단순화.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): 교체 증감률 보스 방어율 380% 단일 기준 — delta300 제거",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T20:52:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cbae0f0f99262481a96ba219b8c7183a76385547",
          "body": "챌린저스 전용 소스를 형 방식(소스 특정 → 잔차 0)으로 추가:\n- collectChallenger: 챌린저스 서버 상시버프 (world_name 게이팅)\n- collectBurning: 버닝BEYOND/하이퍼버닝MAX (옵트인, 스킬 보유 게이팅, 툴팁 실측 하드코딩)\n- JOB_PASSIVES['캡틴']: 캡틴 1~4차 무조건 패시브 (크확/크뎀/최종뎀 잔차 0 검증)\n- collectSet SET_MAX_COUNT: 도전자 세트 팬텀 8세트(넥슨 API 버그) 7세트 캡 → 방무 잔차 0\n- linkSkill 파이렛 블레스: 본인 해적 링크 룰 수정 + 직업 접미사 매칭 → INT/LUK 잔차 0\n\n남은 것(미완): STR/DEX 특화 잔차(파이렛 블레스 해적 추가스탯 추정), 공격력/마력 잔차.\n상세는 docs/captain-residuals.md 참고.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "캡틴(챌린저스) 스탯 재구성 확장 — 11/13 항목 잔차 0 (미완)",
          "author_name": "Jxx5o2",
          "author_login": "Jxx5o2",
          "committed_at": "2026-07-11T17:07:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7d54a9ac564ee5e2295e89535eaecacc29e92ae6",
          "body": "- bridge.spawnBroker: src 직접 실행(tsx) 환경엔 broker.js가 없어 스폰이 조용히 실패하고\n  포트 29171이 영영 안 열림(실측) → dist/broker.js 폴백 + 없으면 빌드 안내\n- README·설치가이드: 넥슨 API 키를 (선택)에서 필수로 (유저 지시)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(server): tsx 소스 실행 시 브로커 스폰 실패 수정 + 넥슨 키 문서 필수로 변경",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T04:00:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a010366705b9fcefbac31110041dab0689c06ed1",
          "body": "maplescouter 의존 없이 최종 데미지 증감률(D_after/D_before − 1)을 로컬 계산:\n- damage/combat.ts: 전투 스탯 시트(cond 포함 재집계) + D 공식\n  (4×주+부(+제2부)) × 공격력 × (1+뎀+보공+상태이상뎀) × 크리팩터 × 방무팩터(300/380) × 최종뎀.\n  크리티컬 리인포스는 크확 전체 수집 후 가장 마지막에 크확×50%를 크뎀으로 전환.\n  제논(3스탯 합)·데몬어벤져(HP/3.5) 축 포함, 미검증 노트 표기.\n- damage/delta.ts: 경매장 매물 파서(f\n[…]\nr_equip 넥슨판(summarizeNexonEquip), item_damage MCP 등록, 계산 무관 옵션(방어력 등) unknown 소음 제거\n- 검증: 오유찬·티엘 실데이터 동일템 스왑 0.00%, 테스트 147/147 (환산 skip 전부 부활)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): v0.8.0 — item_damage·user_equip 부활 (넥슨 오픈 API 자체 엔진)",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T03:40:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "397cb269d5c6e4fef8fd82a5fb578d97bac28f3a",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(server): v0.7.3 — 구매·OTP 코드 완전 제거 릴리스",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T02:46:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "284309264ff2e431ac4eed33da95312a211da9a5",
          "body": "…라 잔재 없이 삭제\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): OTP(401 code 13) 분기 제거 — 찜은 OTP를 안 쓰고, 구매 인증 유도 워딩이…",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T02:44:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fe30777aa392f187ee8bd5ed69f78f5779ccf608",
          "body": "buy_item·raise_limit 주석 블록(mcp.ts)과 죽은 코드 전부 삭제:\n- auction.ts: buyItem·raiseLimit 메서드, buyLimit·txnCounter 필드\n- mapping.ts: PURCHASE_URL·buildPurchaseBody·buildTransactionKey\n- constants.ts: BUY_LIMIT_MESO\n- 테스트: 구매 빌더·buy_item·raise_limit(skip 상태였음) 제거, WRITE_TOOLS 정리\nerrorText의 401 code 13(OTP) 분기는 유지 — 구매 외 쓰기(찜)에서도 나올 수 있는 에러 매핑.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): 구매 코드 완전 제거 — 전체 구현은 backup/buy-tools 브랜치에 보존",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T02:41:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "08789dfba017832c0b7154b355c5e8f8bd43aa3a",
          "body": "- 넥슨 '상태이상 추가 데미지'는 별도 필드 — 어빌 상태이상뎀 + 인텐시브 인썰트(전수·본인)가 여기로 감\n- 오유찬 14(어빌8+본인인텐6), 티엘 17(어빌8+전수인텐9) 둘 다 잔차 0\n- 본인 링크는 character_link_skill 목록에 없어서 owned 필드로 별도 수집\n- D 계산에서 statusDmg는 보스 상시 상태이상 가정으로 데미지에 합산 예정 (유저 방침)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 상태이상 추가 데미지 버킷 + 본인 링크(character_owned_link_skill) 수집",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T02:20:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a44fb000be4dd730f3b0d8fab259ecb706feee96",
          "body": "soul_option은 넥슨 resting 포함 (오유찬 보공 +7%, 티엘 공격력 +3% 정확 일치).\n오유찬 잔차는 데미지 -19 하나만 남음 (scouter도 못 맞추는 넥슨 데미지 필드 고유 소스 — 유저 확인 대기).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 무기 소울 옵션 수집 — 오유찬 보공·티엘 공% 잔차 해소",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T02:11:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c02529ad82e143c702b00bcef9f3a99ae4c7554c",
          "body": "- 공격력/마력 = floor(flat × (1+%/100)) 공식 확정 (오유찬 정확 일치)\n- 위크포인트 어택/컨버징(상태이상 조건부) cond — 빼면 크뎀 45 정확\n- 익스클루시브 스펠·영웅의 메아리·초월 최초의 유산(장시간 버프) cond — 마력 +21 초과 해소\n- 성향 통찰력 크확은 넥슨 크확 필드 미포함(실측) → 수집 제거, 카리스마 방무만 유지\n- 티엘 잔여 잔차(주스탯·공마·크확10·방무0.22)는 전부 챔피언의 가호(수치 미상) 단일 원인 가설로 수렴\n  (오유찬=챔피언 없음=전부 0)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 오유찬(카데나) 공마·크확·크뎀·방무 잔차 0 — resting 원칙 2캐릭 교차 검증",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T01:56:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "91a0f46ab8aaff30f51f44cad8c9a07ffcc572cb",
          "body": "# Conflicts:\n#\t.gitignore",
          "is_bot": false,
          "headline": "Merge branch 'feat/nexon-stat-engine'",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T01:49:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fb8cbca3c2dec0954fa40d85a2ed022639fe02a",
          "body": "- /user/union-champion: champion_badge_total_info(올탯100·공마50·보공25·크뎀15·방무25) 수집 — 보공 잔차 25 정확 해소\n- /character/propensity: 카리스마→방무, 통찰력→크확 (lv×0.1)\n- 스킬 규칙 cond 플래그: 액티브 버프(샤프·쓸샤·쓸어블·레투다)는 resting 미포함, D 계산 전용\n- 펫 세트효과 스킬은 이름 열거 대신 '… Lv.N' 패턴 매칭 (유저 피드백)\n- 크확 베이스 5% 재구성 상수 (크뎀 베이스 0) — 티엘 크확·크뎀 잔차 0\n- 잔여: 주스탯(균일 250+STR/DEX 60)·공마 flat·방무 -0.22 → 챔피언의 가호(버프) 수치 미상\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 유니온 챔피언 뱃지·성향 수집 — 티엘 보공·크확·크뎀 잔차 0",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T01:48:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb54d237a6cc88a1c5d7322630ed389e6f3b6a14",
          "body": "…함 확정\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(server): 유저 확인 반영 — 여축·정축 합산, 어둠의 다크니스(펫) 3중첩, 챔피언의 가호 resting 포…",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T01:32:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "49d8f366c5094e2b63195f77fc6753dcf628ac49",
          "body": "- linkSkill: cond 플래그 — 조건부(소콘·무아·시프커닝·프프·인텐·임피·전투흐름 등)는\n  넥슨 resting 미포함 실측 확인. includeConditional=true(전투 모드)에서만 누적\n- skillPassive: '쓸만한 X'는 본체 X 스킬 보유 시 스킵(중첩 불가, 유저 확인).\n  보우마스터 4차 샤프 아이즈(크확20/크뎀15) 상시 반영 → 크뎀 138.15 정확\n- docs/stat-residuals.md: 잔차 추적 문서 (데미지·크뎀·최종뎀 0 / 주스탯·공마·크확+5·보공·방무 미해결)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 조건부 링크 resting 제외 + 쓸만한↔본체 버프 배타 — 티엘 데미지·크뎀 잔차 0",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T01:23:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "28c3ff877c47f63a29d581cbb0591106699012d1",
          "body": "도구 등록·instructions 두 줄을 주석 보존 처리(서비스 로직·테스트 코드는 유지, 테스트는 skip).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): v0.7.2 — 구매 도구(buy_item·raise_limit) 비활성화",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T01:14:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f4827a6e401a80e1c983cafcde85a025d78abd0d",
          "body": "- hexaStat: character_hexa_stat_core_2/3 합산 (기존 1개만 수집)\n- collect: union_state_stat·union-artifact 수집, 레벨 비례 잠재(9레벨 당 +N) 환산\n- parse: 개별값형 콤마 결합(\"공격력 30, 마력 30 증가\") 파싱\n- skillPassive: COMMON 0차(연합·여축·정축·루나·훈련일지·초월 등) + 보우마스터 1~4차 테이블\n- nexon: fetch/aggregate 분리 (디스크 캐시 재집계용), 아티팩트 엔드포인트 추가\n- cli: 덤프 디스크 캐시(.nexon-raw-*.json, API 재호출 방지) + 전 버킷 소스 분해 + 공·데미지 계열 잔차 비교\n- docs/stat-residuals.md: 티엘 잔차 현황·미해결 질문 기록 (최종뎀 잔차 0, 데미지=조건부 링크 미포함 확정)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 보우마스터 스탯 재구성 확장 — HEXA 코어 3개·유니온 전투스탯·아티팩트·6차 덤프",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-11T01:10:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "36824baf5e81df92b5e00849ee9d4efdd16bdebf",
          "body": "maplescouter 이용 중단 대체로 환산/데미지 계산을 자체 구현. 1차 목표(유저 스탯\n완전 재구성)를 오유찬(카데나) 기준 주스탯 4종 잔차 0으로 달성.\n\nserver/src/damage/:\n- statSheet.ts  UserStat 버킷(flat/flatNoPct/pct/allFlat/allPct/공마/데미지·보공/\n  방무·최종뎀 곱연산 목록/크리)\n- nexon.ts      넥슨 오픈 API 클라이언트(순차·429 백오프, NEXON_DEVELOPER_KEY)\n                + collectChar\n[…]\n받음): 심볼·하이퍼·유니온 공격대원·HEXA 주스탯\n- 유니온은 /user/union-raider\n\n아직 MCP 도구 미배선(standalone+CLI). 타 직업 검증·데미지 D계산은 다음 단계.\nmaplescouter 참고코드(hwansan2)는 보존.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 넥슨 오픈 API 기반 스탯 재구성 엔진 (WIP, 카데나 검증)",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-10T23:22:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b654bdeb5155d3ede102708c74a333e171b46ea4",
          "body": "maplescouter API 이용 중단 요청(운영팀)에 따라 환산 계산 도구를 AI 노출에서\n제외한다. maplescouter를 호출하던 유일한 경로가 이 두 도구라, 비노출로 호출이\n멎는다. 검색·구매 등 나머지 기능은 그대로.\n\n- mcp.ts: item_hwansan·user_equip registerTool + 관련 instruction 주석 처리\n  (삭제 아님 — 넥슨 오픈 API 기반으로 재구현해 되살릴 예정)\n- mcp.test.ts: 두 도구 테스트 describe.skip\n- hwansan2/scouter 코드는 아직 남아있음(다음 커밋에서 정리)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): v0.7.1 — 환산 도구(item_hwansan·user_equip) 비활성화",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-10T21:18:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "89165b4e540cbffdc53b9328829290e516264e88",
          "body": "GET /v1/accounts/{accountId}/gameWorlds/{worldId}/balance 실측 반영.\nbuy_item·get_status가 { meso, maplePoint(메포) }를 함께 반환한다.\n\n실측(2026-07-11): 타월드 구매는 메소로 결제하고 메포로 크로스월드 수수료를\n뗀다(280,000메소 매물 → 메소 -282,499 / 메포 -10). 둘 다 노출한다.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "actfeat(server): v0.6.1 — 구매·상태 조회에 메소·메포 잔액 표시",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-10T18:17:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f38208016394f767e00ce57ec9fc4d8682f3441b",
          "body": "경매장 매물 구매(buy_item)와 세션 구매 한도 상향(raise_limit)을 추가한다.\n실측(2026-07-11)으로 OTP 인증된 세션에서 실구매 성공 확인.\n\n구매:\n- 가격·총액은 AI 입력이 아니라 직전 검색 캐시(rawItemCache)에서 서버가 계산\n- 검색 id 앞부분(encryptedItemId)을 tradeSn 필드로 전달 → offers 선행 조회 불필요\n- x-transaction-key 멱등키(w/d/{ts36}-{accountId}-{ctr36}, 28자) 재현\n- 성공 응답은 빈 body → HTT\n[…]\ntion 없이 호스트 도구 승인 프롬프트(destructiveHint)에 의존 — 모든 호스트 공통\n\n인프라:\n- BridgeCommandInput.headers 병합(nexon.ts) → x-transaction-key 전달\n- 확장·브로커 프로토콜 무변경\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): v0.6.0 — buy_item·raise_limit 구매 도구",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-10T16:26:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "59100aef4af6adc80e444eb404c3df716ef7e8a0",
          "body": "- Gemini CLI 2026-06-18 개인 계정 종료, mcp add 명령 없는 Antigravity CLI는 mcp_config.json 직접 편집 방식\n- 설치가이드: 한 줄 등록용 node 명령(파일 생성·기존 서버 보존·Windows cmd /c 자동), 구버전 경로 폴백 팁\n- README: Antigravity CLI 등록 JSON 및 /mcp 확인 안내\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: Gemini CLI 지원 종료 반영 — Antigravity CLI(agy) 안내로 교체",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-10T15:19:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4229c1245b6f6b8ab7cab8cd5d156fd8d45e79f1",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: Gemini CLI 지원 안내 추가 — 설치가이드 신설, README에 등록 명령",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-10T14:39:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5df557780a66246ee73ac9ea053870d70e868f70",
          "body": "기존 mcp.test.ts 무수정 그린 (행동 변화 0)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): mcp.ts를 순수 MCP 어댑터로 — 유스케이스·세션 상태는 AuctionService로 위임",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T23:04:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aca747f3ce12ce0838be1548477eea7bddca4c18",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(server): AuctionService 추출 준비 — 세션 상태·유스케이스를 담는 서비스 계층 (아직 미배선)",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T21:55:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cb387ca586c73e8fb6eaa94525e6d01becdfc472",
          "body": "카테고리 불확실 시 전체 검색으로 먼저 확인 — 0건 검색도 횟수를 소진하므로\n카테고리 확정 후 시세·필터 검색을 걸도록 지식 노트에 명시.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(knowledge): v0.5.1 — 경매장 검색 팁에 카테고리 선확정 규칙 추가",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T21:31:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f9663fbdee1be19d820a167b4253a9de7e0c817e",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): v0.5.0 — NexonBridge 배선, 프로토콜 v2 전환 완료",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:50:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c8e0e0da1794698ba497b95a0c2c26cfbb15e55b",
          "body": "…nexon.ts로\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 발견을 서버측으로 — discoverIdentity + fanout 프로브, BridgeLike는 …",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:50:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f051a5bac8f7e91bec5aa42194c2d42cb6e9fa6a",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): 브로커 discover → fanout fetch — 로그인 확장 선택 지식을 서버로",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:41:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a08a537814c527e8cb6dae0d3637e4fe089bfabc",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): nexon.ts — 넥슨 헤더 단일 소유 + NexonBridge 와이어 변환 계층",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:39:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2e134b3eb38188a24a50ba546474d5d8c54c8fa2",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(extension): v0.3.0 — 범용 프록시로 전환, API 지식 전부 서버 이전 (마지막 심사 대상)",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:38:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "971e7e2a3fb83d97b4a62fa0e67095cb1b66ae00",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(shared): 프로토콜 v2 — 와이어/내부 계층 분리, discover 폐지, FORBIDDEN_URL 추가",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:36:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3933a1f7173245cbade0b327a8a844b061b233b5",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(server): 구버전 확장의 nxlogin 안내문을 옥션 페이지 안내로 덮어쓰기",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:23:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3ee24f188ddab914cc7c3be20e54a8a6d49753bf",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): 설치 안내 — 넥슨 로그인 대신 경매장 페이지 로그인으로 수정",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:05:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "90bd87de7a4f57a6c268dda00151fea8a232f605",
          "body": "픽스처(fixtures/hwansan2/adele/)가 gitignore되어 로컬에서만 통과하고\nCI에선 ENOENT로 실패하던 테스트. 세트 카운트 검증은 커밋된 카데나\n픽스처 기반 교차검증(266행)이 커버한다.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(hwansan): 아델 픽스처 교차검증 테스트 제거 — CI 수정",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T20:04:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7f6ac3e25fdf3a8ad50dcaba289711fa98a26ca7",
          "body": "- search_consume/search_cash/search_etc 추가 (sold=true 시세 동일 지원)\n- 캐시 전용 필터 실측 반영: gender·royalSpecialType·petGrade(basicOption), 기간제 옵션(cashOption period* 평면 키)\n- 카테고리 코드·한글 라벨 번들 추출 수록 (CONSUME 26종 / CASH 36종 / ETC 3종)\n- 결과 과다 422(code 4040)는 소진 없음 + 좁히기 안내 반환\n- 비장비 요약: tradeDescs·timeLimit·gender·label(코디 라벨/펫 등급)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): 소비·캐시·기타 검색 3종 + 시세 — v0.4.1",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T19:41:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7e594895084ca49609f375f061e245fff0572a66",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(extension): v0.2.0 — 웹스토어 릴리스 범프",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T19:02:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bf64cc63fa86910605b6ac0a83abbf89d0c68980",
          "body": "- 검색 전략 팁(노작·정렬)을 instructions에서 지식 노트 '경매장 검색 팁' 절로 이관 (상시 토큰 절감)\n- 검색 결과에 사용한 필터 조건 표기 규칙 추가\n- 일일 한도 문구를 절약 지시에서 사실 전달로 완화 (품질 우선, searchRemaining 발견성)\n- remove_wishlist: 재추가 가능하므로 destructiveHint false\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): 지침 슬림화 — 검색 팁 지식노트 이관, 필터 표기 규칙, 한도 문구 완화",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T18:56:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "af1b56813d6e58d0fd60eab5a174fedf2a312e38",
          "body": "- 같은 조건(body+sold) 재검색이면 POST 없이 기존 searchKey 재사용(소진 없음, note 안내).\n  searchKey는 조건만 저장하므로 GET 결과는 항상 실시간. 만료 시 자동 재생성,\n  get_page 만료 복구 경로도 conditionCache 갱신\n- note 3종: 0건(횟수는 소진됨) / 무필터 장비 검색 200건 초과(노작 편중 경고) /\n  ATTACK_POWER_DESC + 500건 초과(정렬 미적용)\n- 지식 노트에 '호가와 체결가' 섹션 — 추천·적정가 판단의 근거는 시세검색(체결가)\n- 레퍼런스·maple_auction.md에 하네스 동작 문서화\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): 검색 하네스 — 동일 조건 dedup + 사실 피드백 note",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T18:14:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6b1204578d2757d6cbed0c0d5c3b7a2acb7a4816",
          "body": "- finalStat 11키 고정 JSON → stat 한 줄 문자열 (user_equip과 라벨·순서 통일, 0인 스탯 생략)\n- 값 없는 필드 생략(potential/soul/scroll/powerDiff/tradeDate 등) — 매물당 ~37줄 → ~18줄,\n  limit 60 페이지가 호스트 결과 캡(~25k 토큰)에서 안전해짐. status·quantity·isMyWorld는 유지\n- 전 도구에 title + readOnlyHint/destructiveHint annotation, 설명의 행동 지시 제거(테스트로 고정)\n\n[…]\nructions 재편: 시세(sold) 발견성은 search_* 설명으로 이동, 응답 토큰 비용 정보 추가,\n  검색 횟수 절약 압박 완화\n- docs 동기화: 레퍼런스(도구 14개·stat 필드·생략 규칙·get_status state), 응답 예시 재생성\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): 매물 요약 압축 + 디렉토리 심사 기준 충족",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T18:06:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e3448cdd4dc2845ce4f4976e084d1b2cd5bcdb75",
          "body": null,
          "is_bot": false,
          "headline": "옥션",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T17:41:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02bf4d82ad812473ad59490669ab5d9188b49adc",
          "body": "- get_knowledge 도구 신설 — 리소스를 모델이 못 읽는 호스트(Claude Desktop 등)\n  대응, context7의 문서 서빙 패턴. 내용은 maple://knowledge 리소스와 동일\n- KNOWLEDGE_APPENDIX 삭제: 서버 부록 내용을 maple_knowledge.md로 병합해\n  지식은 md 파일 하나가 단일 소스 (loadKnowledge는 md만 읽음)\n- 지식 노트 대폭 확장(사용자 작성): 잠재 수치표·이탈 확률·스타포스·놀장·\n  환산·교불 3단계·럭키/세트·전승·별칭 문법\n- instructions 필독 포인터를 get_knowledge 우선으로 변경\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): get_knowledge 도구 추가 + 지식 노트 단일 소스화",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T16:29:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2b06564110a600744c27c5cd7aabcbf54164cee",
          "body": "- instructions는 도구 사용 규칙만 남기고, 도메인 지식(추옵·잠재·가위·\n  별칭·타월드 등)은 MCP 리소스로 서빙 — 상시 토큰 절약, 필요 시 로드\n- knowledge.ts: 리포 루트 원본 우선, 배포 환경은 dist 동봉 사본 폴백.\n  요청 시점마다 읽어 노트 수정이 재시작 없이 반영. instructions에서\n  옮겨온 기본 상식은 서버 부록으로 덧붙임(원본은 READ ONLY)\n- build.mjs: 빌드 시 maple_knowledge.md를 dist에 동봉\n- 지식 노트 확충(놀장·전투력vs환산·교불·럭키·세트 섹션 골격)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): 게임 지식을 maple://knowledge 리소스로 분리",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T16:03:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c129fb84e1f32df480de0b61ab8edd419e54829e",
          "body": "- 배포 채널이 달라(웹스토어 자동 vs npm 수동) 버전 스큐가 상시 상태 —\n  스큐를 막는 대신 감지해 행동 지시형 안내로 실패시킨다\n- shared: PROTOCOL_VERSION=1(깨지는 변경에만 +1), ExtensionHello,\n  PROTOCOL_MISMATCH 코드, 방향별 안내문(확장 업데이트/서버 업데이트)\n- extension: WS 접속 직후 hello(프로토콜+manifest 버전) 전송\n- broker: 연결별 버전 기록, 불일치 시 요청 차단 + 안내, discover는\n  불일치 확장 제외 후 호환 확장 선택. hello 미보고(도입 전 dev 빌드·\n  수신 전 찰나)는 차단하지 않음\n- 실제 WS 왕복 테스트 5건 추가\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bridge): 확장↔서버 프로토콜 버전 핸드셰이크 (PROTOCOL_VERSION)",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T16:03:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2a0f0443dd7b61ff0c69195289d05b546756d4d8",
          "body": "- 추옵·잠재(이탈옵션)·타월드 수수료 화법·아이템 별칭 관례·가위횟수 가치곡선\n  등 AI 판단 기준이 되는 도메인 지식 (READ ONLY)\n- server/src/item.json: 실측 매물 요약 샘플\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: 메이플 경매장 지식노트(maple_knowledge.md) + 매물 요약 샘플 추가",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T15:45:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6682e5136b064f67e23d7cfd7c196871c3128b5b",
          "body": "- 에러 텍스트의 독자는 사용자가 아니라 AI(MCP 클라이언트): 주체 없는\n  \"확인하세요\"는 AI가 자기 일로 해석해 코드 디버깅에 빠짐 → \"사용자에게\n  안내하고 대기하세요\"로 행동 주체 명시 (로그인·계정조회·403 안내)\n- 확장 미연결 문구를 shared DISCONNECTED_MSG로 통합: 재시도 정책(30초 내\n  자동 재연결 → 1회 재시도)과 웹스토어 설치 주소 포함\n- instructions에 추천 리포트 형식 추가: 표에는 스펙·가격·환산·가위·월드만,\n  타월드는 수수료 포함가 대신 \"타월드\" 표기, 별칭은 문장에서만\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(messages): 에러 안내문을 AI 행동 지시형으로 정리 + DISCONNECTED_MSG 공유 상수화",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T15:45:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4d91c3f19139a5170fa655903ecea9a15bf64d0f",
          "body": "- maplescouter /api/id(10분 캐시) 기반: slot 생략 시 24부위 요약+환산380,\n  지정 시 스탯·잠재·에디·소울·가위 상세 (summarizeScouterEquip)\n- characterName 생략 시 현재 검색 기준 캐릭터로 폴백\n- 실측 fixture(id-response) 캐시 시딩으로 네트워크 없는 테스트 4건 추가\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): user_equip 도구 — 임의 캐릭터의 착용 장비 조회",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T15:00:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8f9588db5f7e7c53c589b081219183e856e4b44e",
          "body": "- tools/list 페이로드 23,120→16,773자: 옵션 키·카테고리 라벨 전체 나열을\n  비자명 매핑만 남기고 압축, 자명한 파라미터 describe 제거\n- 검색 횟수·놀장·powerDiff 등 도구마다 반복되던 안내를 instructions로 통합\n- instructions에 워크플로 지침 추가: 첫 검색 전 캐릭터(월드·닉네임) 안내,\n  공/보공/방무는 item_hwansan 환산 비교(호출 최소화), 매물 id 노출 금지\n  (특징 별칭 사용), 가위 잔여 낮으면 필수 명시\n- 미사용이 된 labelList 제거\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(mcp): 도구 프롬프트 토큰 27% 절감 + 사용 지침 instructions 집중화",
          "author_name": "yuchan",
          "author_login": "oyc0401",
          "committed_at": "2026-07-09T14:54:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 0,
      "commits_last_year": 163,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 3,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "maple-auction-mcp",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/maple-auction-mcp",
          "is_deprecated": false,
          "latest_version": "0.8.1",
          "repository_url": "https://github.com/oyc0401/maple-auction-mcp",
          "versions_count": 16,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3185,
          "first_published_at": "2026-07-07T18:26:18.080000Z",
          "latest_published_at": "2026-07-18T17:34:45.877000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 5,
      "stars": 11,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-10",
            "count": 3
          },
          {
            "date": "2026-07-20",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 5,
        "total_forks": 5
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "extension/tsconfig.json",
        "server/tsconfig.json",
        "shared/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 113671,
      "source_files_sampled": 102,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "extension/package.json",
        "package.json",
        "server/package.json",
        "shared/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@maple/shared",
          "manifest": "extension/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        }
      ],
      "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": 1,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 5
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "oyc0401",
          "commits": 162,
          "avatar_url": "https://avatars.githubusercontent.com/u/73932179?v=4"
        },
        {
          "type": "User",
          "login": "Jxx5o2",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/216548714?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.994
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "pnpm-lock.yaml"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 3 contributing companies or organizations -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 3,
            "reason": "7 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "d01119598479225946c3a7defa9be6f2f1b93295",
        "ran_at": "2026-07-24T03:23:22Z",
        "aggregate_score": 2.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-18T17:35:02Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-11T20:53:46Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/oyc0401/maple-auction-mcp",
    "host": "github.com",
    "name": "maple-auction-mcp",
    "owner": "oyc0401"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 27,
        "vitality": 34,
        "community": 47,
        "governance": 44,
        "engineering": 78
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 34,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 163,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "163 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 163
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "critical",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 47,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 21,
            "inputs": {
              "forks": 5,
              "stars": 11,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "11 stars",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "5 forks",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 58,
            "inputs": {
              "packages": [
                "maple-auction-mcp"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3185
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,185 downloads/month across npm",
                "points": 46.7,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3185,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 44,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 22,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.994
            },
            "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 99% of commits",
                "points": 0.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 12,
            "inputs": {
              "merged_prs": 1,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 5
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1/6 decided PRs merged",
                "points": 6.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "decided": 6
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "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": 58,
            "inputs": {
              "followers": 59,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "oyc0401",
              "public_repos": 40,
              "account_age_days": 2087
            },
            "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": "59 followers of oyc0401",
                "points": 12.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 59,
                      "login": "oyc0401"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "40 public repos, account ~5 yr old",
                "points": 23.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 40
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 5
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "maple-auction-mcp"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "16 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 16
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 78,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": 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": "critical",
        "name": "Security",
        "value": 27,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 27,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 2.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "7 existing vulnerabilities detected",
                "points": 2.2,
                "status": "partial",
                "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": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 62,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.98,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "98 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 98,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "extension/tsconfig.json",
                "server/tsconfig.json",
                "shared/tsconfig.json"
              ],
              "agent_commit_share": 0.81,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "extension/tsconfig.json, server/tsconfig.json, shared/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "extension/tsconfig.json, server/tsconfig.json, shared/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "81 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 81,
                      "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": "TypeScript",
              "largest_source_bytes": 113671,
              "source_files_sampled": 102,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/102 source files over 60KB",
                "points": 54.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 102,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package '@maple/shared' from its registry",
    "Could not fetch npm package '@maple/extension' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:maple-auction-mcp@0.8.1; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T03:23:27.099323Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/oyc0401/maple-auction-mcp.svg",
  "full_name": "oyc0401/maple-auction-mcp",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.