Informe JSON sin procesar legible por máquina
{
"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"
}