k-skill/scripts
Jeffrey (Dongkyu) Kim b4a15406cf Prevent Seoul Bike upstream errors from masquerading as empty availability
Constraint: Seoul Open API can return application-level error JSON with HTTP 200, so proxy routes must inspect RESULT envelopes before caching or normalizing rows.
Rejected: Treating missing rentBikeStatus.row as an empty success | it masks quota/service failures and caches false no-station results.
Confidence: high
Scope-risk: narrow
Directive: Preserve non-cacheable proxy error behavior for Seoul Open API semantic failures across realtime, stations, and nearby routes.
Tested: node --test packages/k-skill-proxy/test/server.test.js --test-name-pattern 'seoul bike'; PYTHONPATH=.:scripts python3 -m unittest scripts.test_seoul_bike; local fake-proxy seoul_bike.py nearby smoke; PATH="/Users/jeffrey/.pyenv/versions/3.11.9/bin:/Users/jeffrey/.codex/tmp/arg0/codex-arg0j0fIum:/opt/homebrew/lib/node_modules/@openai/codex/node_modules/@openai/codex-darwin-arm64/vendor/aarch64-apple-darwin/path:/Users/jeffrey/.cmuxterm/omo-bin:/opt/homebrew/share/android-commandlinetools/platform-tools:/opt/homebrew/share/android-commandlinetools/emulator:/opt/homebrew/share/android-commandlinetools/cmdline-tools/latest/bin:/Users/jeffrey/.local/bin:/Users/jeffrey/.bun/bin:/opt/homebrew/opt/node@22/bin:/opt/homebrew/opt/openjdk@21/bin:/opt/homebrew/opt/postgresql@18/bin:/Users/jeffrey/.jenv/shims:/Users/jeffrey/.jenv/bin:/opt/homebrew/opt/imagemagick/bin:/opt/homebrew/Cellar/pyenv-virtualenv/1.4.0/shims:/Users/jeffrey/.pyenv/shims:/opt/homebrew/opt/openssl@3/bin:/Users/jeffrey/.rbenv/shims:/Users/jeffrey/.rbenv/bin:/Users/jeffrey/google-cloud-sdk/bin:/Applications/cmux.app/Contents/Resources/bin:/Users/jeffrey/Library/pnpm:/Users/jeffrey/.nvm/versions/node/v24.13.0/bin:/Users/jeffrey/.cops/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/opt/pmk/env/global/bin:/Library/Apple/usr/bin:/Library/TeX/texbin:/Users/jeffrey/.cargo/bin:/Users/jeffrey/Library/Application Support/JetBrains/Toolbox/scripts:/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/bin:/Users/jeffrey/xcode-projects/marshroom/cli" npm run ci; architect review APPROVED.
Not-tested: Live Seoul Open API error response from production service.
2026-05-21 15:39:32 +09:00
..
fixtures Merge pull request #122 from NomaDamas/feature/#120 2026-04-16 13:18:28 +09:00
build-manus-bundle.js feat: Manus.ai 호환 import 경로 추가 (GitHub URL + rolling .skill 번들) (#227) 2026-05-11 12:12:44 +09:00
build-region-codes.js Merge dev into main: new skills & proxy enhancements (#72) 2026-04-06 17:44:23 +09:00
check-setup.sh Replace sops+age encryption with plain dotenv and agent-native credential resolution 2026-03-30 22:12:04 +09:00
fine_dust.py Replace sops+age encryption with plain dotenv and agent-native credential resolution 2026-03-30 22:12:04 +09:00
geeknews_search.py Add a repeatable GeekNews lookup path without unofficial APIs 2026-04-13 00:16:35 +09:00
k_skill_cleaner.py Align cleaner helper contract with selective installs 2026-04-28 17:50:54 +09:00
kakaotalk_mac.py Feature/#121 (#127) 2026-04-18 01:08:06 +09:00
korean_character_count.js Standardize Korean text counts for form-limited writing 2026-04-08 22:55:31 +09:00
korean_spell_check.py Merge dev into main: new skills & proxy enhancements (#72) 2026-04-06 17:44:23 +09:00
ktx_booking.py Reduce N-card number exposure in KTX booking 2026-05-12 19:06:27 +09:00
mfds_drug_safety.py Ship interview-first MFDS safety skills for drugs and food 2026-04-08 22:23:14 +09:00
mfds_food_safety.py Ship interview-first MFDS safety skills for drugs and food 2026-04-08 22:23:14 +09:00
nts_business_registration.py Harden NTS validate privacy boundary 2026-05-14 22:20:33 +09:00
patent_search.py Sync dev → main: 84 commits incl. korea-weather, korean-stock-search, korean-patent-search, bunjang-search (#80) 2026-04-08 21:13:55 +09:00
run-k-skill-proxy.sh Replace sops+age encryption with plain dotenv and agent-native credential resolution 2026-03-30 22:12:04 +09:00
seoul_density.py Add seoul-density skill and proxy route for Seoul realtime hotspot crowd levels 2026-05-14 15:37:54 +09:00
sillok_search.py Merge dev into main: new skills & proxy enhancements (#72) 2026-04-06 17:44:23 +09:00
skill-docs.test.js Add Seoul Bike live station lookup 2026-05-21 15:27:29 +09:00
subway_lost_property.py Add an official subway lost-property guidance path 2026-04-10 12:05:50 +09:00
test_build_manus_bundle.js feat: Manus.ai 호환 import 경로 추가 (GitHub URL + rolling .skill 번들) (#227) 2026-05-11 12:12:44 +09:00
test_coupang_partners_mcp_wrapper.py Drop non-allowlisted coupang-mcp-fallback recommendation from hosted fallback docs 2026-04-21 00:38:50 +09:00
test_danawa_price_search.py Keep icon-only Danawa payment badges visible 2026-05-15 17:50:58 +09:00
test_fine_dust.py Make the fine-dust proxy easier to consume than the upstream APIs 2026-03-28 17:14:18 +09:00
test_geeknews_search.py Add a repeatable GeekNews lookup path without unofficial APIs 2026-04-13 00:16:35 +09:00
test_k_skill_cleaner.py Clarify cleaner usage evidence boundaries 2026-04-28 18:08:17 +09:00
test_kakaotalk_mac.py Merge pull request #249 from NomaDamas/feature/#248 2026-05-15 18:02:04 +09:00
test_korean_character_count.js Preserve documented Korean count semantics in edge-case inputs 2026-04-08 23:28:42 +09:00
test_korean_slang_writing.py korean-slang-writing (#133): harden extractor with numbered-h2 gate + category-nav strip 2026-04-22 14:18:42 +09:00
test_korean_spell_check.py Merge dev into main: new skills & proxy enhancements (#72) 2026-04-06 17:44:23 +09:00
test_ktx_booking.py Cover NCard error branches 2026-05-12 19:09:45 +09:00
test_mfds_drug_safety.py Route MFDS drug-safety and food-safety lookups through k-skill-proxy 2026-04-14 00:07:18 +09:00
test_mfds_food_safety.py Route MFDS drug-safety and food-safety lookups through k-skill-proxy 2026-04-14 00:07:18 +09:00
test_myrealtrip_mcp.py Cover MyRealTrip MCP wrapper parsing 2026-05-12 19:10:00 +09:00
test_naver_blog_search.py feat: 네이버 블로그 리서치 스킬 추가 (#107) 2026-04-13 00:06:18 +09:00
test_nts_business_registration.py Harden NTS validate privacy boundary 2026-05-14 22:20:33 +09:00
test_ohou_today_deal.py fix(ohou-today-deal): address PR #264 review (live UA, explicit feed selection, argv validators) 2026-05-18 16:36:56 +09:00
test_patent_search.py Sync dev → main: 84 commits incl. korea-weather, korean-stock-search, korean-patent-search, bunjang-search (#80) 2026-04-08 21:13:55 +09:00
test_seoul_bike.py Prevent Seoul Bike upstream errors from masquerading as empty availability 2026-05-21 15:39:32 +09:00
test_seoul_density.py Add seoul-density skill and proxy route for Seoul realtime hotspot crowd levels 2026-05-14 15:37:54 +09:00
test_sillok_search.py Merge dev into main: new skills & proxy enhancements (#72) 2026-04-06 17:44:23 +09:00
test_subway_lost_property.py Keep LOST112 curl guidance usable under live latency 2026-04-10 13:01:01 +09:00
test_ticket_availability.py feat(ticket-availability): YES24·인터파크 공연 일정·잔여석 조회 (조회 전용) 2026-05-13 02:50:26 +09:00
test_zipcode_search.py Keep the zipcode helper directly executable 2026-04-10 10:48:00 +09:00
ticket_availability.py Let ticket tests run without httpx installed 2026-05-14 12:30:05 +09:00
validate-skills.sh fix(ci): exclude tools/ from skill validator 2026-05-17 22:40:26 +09:00
zipcode_search.py Keep the zipcode helper directly executable 2026-04-10 10:48:00 +09:00