k-skill/docs/features/korean-marathon-schedule.md
Jeffrey (Dongkyu) Kim 667e2e1347
Feature/#211 (#222)
* Add public marathon schedule lookup

Implement a read-only Korean marathon schedule skill so agents can report event dates, venues, registration deadlines, and categories from public race pages, with best-effort triathlon coverage.

Constraint: Issue #211 requires 장소, 신청 마감일, 종목, and possible triathlon inclusion without interactive clarification.

Constraint: Public unauthenticated GoRunning and triathlon.or.kr surfaces do not require k-skill-proxy.

Rejected: Proxy route | upstream pages are public and need no API key, so proxying would violate the free API proxy inclusion rule.

Confidence: high

Scope-risk: moderate

Directive: Keep source parsing fail-soft with explicit warnings when one public source changes or is temporarily unavailable.

Tested: npm test --workspace korean-marathon-schedule; live CLI smoke for 고령 2026 triathlon category; npm run ci; architect verification approved.

Not-tested: Real-time coverage of every future race page variant across both upstream sites.

Co-authored-by: OmX <omx@oh-my-codex.dev>

* Keep marathon locations authoritative

Fix the reviewed GoRunning region inference bug by ranking event location fields ahead of full-page text, and remove the unrelated public SH notice proxy/skill surface so the PR remains inside the approved marathon scope and proxy policy.

Constraint: PR #222 review required TDD, full verification, and removal of public unauthenticated SH proxy routes before merge-readiness.
Rejected: Keeping /v1/sh-notice as a proxy route | violates the repository free-API proxy inclusion rule for public unauthenticated HTML.
Confidence: high
Scope-risk: narrow
Directive: Do not reintroduce public unauthenticated SH scraping through k-skill-proxy without an explicit documented policy exception.
Tested: npm test --workspace korean-marathon-schedule; node packages/korean-marathon-schedule/src/cli.js 용인 --from 2026-05-01 --to 2026-06-30 --limit 3; node packages/korean-marathon-schedule/src/cli.js 고령 --from 2026-01-01 --to 2026-12-31 --include-triathlon --limit 5; npm run lint --workspace k-skill-proxy; npm test --workspace k-skill-proxy; grep -RIn 'sh-notice\|i-sh.co.kr' README.md docs packages package.json package-lock.json .changeset; npm run ci; git diff --check; architect verification CLEAR.
Not-tested: None.

* Bound marathon schedule crawling to trusted sources

Fix review-round false negatives by continuing beyond the old pre-filter windows while adding an explicit per-source detail budget and warnings for partial crawls. Keep race detail traversal constrained to documented hosts and filter triathlon non-race rows before fetching details.\n\nConstraint: Review round required TDD, live verification, full CI, and preserving the public no-proxy source boundary.\nRejected: Exhaustive unbounded detail traversal | it maximizes recall but can over-crawl public list pages.\nConfidence: high\nScope-risk: narrow\nDirective: Keep future crawling changes host-allowlisted, budgeted, and warning-producing when partial.\nTested: npm test --workspace korean-marathon-schedule; npm run lint --workspace korean-marathon-schedule; node packages/korean-marathon-schedule/src/cli.js 고령 --from 2026-01-01 --to 2026-12-31 --include-triathlon --limit 5; node packages/korean-marathon-schedule/src/cli.js 용인 --from 2026-05-01 --to 2026-06-30 --limit 3; npm run ci; architect verification CLEAR.\nNot-tested: Live off-origin or malformed upstream HTML beyond mocked regressions.

* Honor explicit public crawl budgets

Keep broad triathlon searches bounded by applying one detail budget across selected year lists and exposing the same budget control in the CLI.

Constraint: PR #222 review requested shared triathlon crawl budget and CLI access to maxDetailsPerSource.

Rejected: Per-year triathlon budget counters | they can exceed the documented per-source crawl cap on multi-year ranges.

Confidence: high

Scope-risk: narrow

Directive: Keep public-source crawl caps source-scoped and documented when adding more list partitions.

Tested: npm test --workspace korean-marathon-schedule; npm run lint --workspace korean-marathon-schedule; live CLI 고령 smoke; CLI help grep; npm run ci; git diff --check; architect verification CLEAR

Not-tested: Live multi-year low-budget triathlon crawl against upstream beyond mocked regression.

---------

Co-authored-by: OmX <omx@oh-my-codex.dev>
2026-05-12 18:49:06 +09:00

2.3 KiB

한국 마라톤 일정 조회 가이드

korean-marathon-schedule 스킬은 공개 웹 표면을 읽어 한국 마라톤/러닝 대회 일정을 조회하고, 요청 시 철인3종 대회도 함께 확인합니다.

제공 정보

각 결과는 가능한 범위에서 아래 정보를 반환합니다.

  • 대회명
  • 개최일
  • 지역과 장소
  • 신청 마감일 및 접수 기간
  • 종목/코스
  • 주최자
  • 공식 웹사이트 또는 공개 상세 링크

공개 접근 경로

구분 공개 표면 사용 정보 인증
마라톤/러닝 https://gorunning.kr/races//races/<id>/<slug>/ 상세 페이지 일정, 장소, 접수 기간, 종목, 주최자, 웹사이트 불필요
철인3종 https://triathlon.or.kr/events/tour/?sYear=<YYYY>&vType=list 및 상세 페이지 일정, 장소, 접수 기간, 코스, 주최자 불필요

두 표면 모두 API 키가 필요 없는 공개 읽기 경로이므로 k-skill-proxy를 사용하지 않습니다.

사용 예시

const { searchEvents } = require("korean-marathon-schedule")

const result = await searchEvents({
  query: "서울",
  from: "2026-05-01",
  to: "2026-12-31",
  includeTriathlon: true,
  limit: 10
})

console.log(result.items)

CLI:

node packages/korean-marathon-schedule/src/cli.js 서울 --from 2026-05-01 --to 2026-12-31 --include-triathlon --limit 10

응답 작성 원칙

- 대회명: 소아암환우돕기 제23회 서울시민마라톤
  일정: 2026-05-10
  장소: 서울 여의도 한강 물빛광장
  신청 마감: 2026-02-28 (접수기간 2026-01-12 ~ 2026-02-28)
  종목: Half, 10km, 5km, 3km 걷기
  링크: https://gorunning.kr/races/...

신청 마감일이 공개 페이지에서 확인되지 않으면 추정하지 말고 신청 마감일 미확인으로 표시합니다.

실패/주의 사항

  • 일정과 접수 상태는 수시로 바뀌므로 조회 시각 기준 참고값으로 안내합니다.
  • 공개 HTML 구조가 바뀌면 일부 필드가 비거나 파싱이 실패할 수 있습니다.
  • 접수/결제/로그인/CAPTCHA가 필요한 경로는 자동화하지 않습니다.
  • 행사별 공식 사이트가 없으면 GoRunning 또는 대한철인3종협회 상세 링크를 대신 제공합니다.