k-skill/scripts
Jeffrey (Dongkyu) Kim 4e5abf0861
Feature/#212 (#214)
* Help donors choose verified recipients by place and cause

Add a read-only donation-place search skill and npm helper that ranks Korean donation recipients by user-provided location/category while keeping final verification on official 1365 and recipient pages. The implementation avoids proxy routes because the chosen verification surface is public and does not require an API key.

Constraint: Issue #212 requested 기부처 조회 recommendations by place and category under TDD with a PR to dev.
Constraint: k-skill free API proxy policy allows proxying only when upstream requires API keys; 1365 verification links are public.
Rejected: Screen-scraping 1365 result pages | headless requests were slow/unstable and would be brittle for a recommendation helper.
Rejected: Treating general-purpose charities as matches for every requested category | architect review found it could return off-category results, so matching now requires explicit category tags.
Confidence: high
Scope-risk: narrow
Directive: Do not add automatic donation/payment submission; keep this skill read-only and require official-page verification before final donation decisions.
Tested: npm test --workspace donation-place-search
Tested: node smoke invocation of recommendDonationPlaces + formatDonationRecommendationReport for 서울 마포구/동물
Tested: npm run lint --workspace donation-place-search
Tested: npm run typecheck
Tested: npm run ci
Tested: architect verification approved after off-category regression fix
Not-tested: Live 1365 search result scraping; intentionally not used because the skill returns official verification links instead.
Co-authored-by: OmX <omx@oh-my-codex.dev>

* Keep donation recommendations on requested intent

Prioritize specific donation category keywords before broad general donation terms, and make item-level 1365 links candidate-specific while preserving the broad result search link.

Constraint: PR #214 review required TDD fixes for category normalization and per-candidate 1365 link semantics.

Rejected: Rewording item URLs as broad portal searches | the issue explicitly asks for candidate-specific verification links.

Confidence: high

Scope-risk: narrow

Directive: Keep item officialSearchUrl candidate-specific; use result officialSearchUrl for broad latest portal searches.

Tested: npm test --workspace donation-place-search; node smoke invocation; npm run lint --workspace donation-place-search; npm run typecheck; npm run ci; code-reviewer APPROVE; architect CLEAR.

Not-tested: Live 1365 HTTP availability, because the workflow only builds official read-only search links and prior review documented headless 1365 timeouts.

* Harden donation skill follow-up guarantees

Constraint: PR #214 review follow-up required TDD, empty category defaults, README discoverability, and release-pack coverage without pinning package versions.\nRejected: Static pack dry-run allowlist | it already missed a publishable workspace and would drift again.\nConfidence: high\nScope-risk: narrow\nDirective: Keep pack dry-run coverage dynamic over publishable workspaces; do not assert workspace package versions in tests.\nTested: npm test --workspace donation-place-search; node smoke for empty category URL/recommend/report; npm run lint --workspace donation-place-search; npm run typecheck; npm run ci; git diff --check; code-reviewer APPROVE; architect CLEAR.\nNot-tested: Live 1365 portal filtering semantics, by design; links remain read-only verification entry points.

* Clarify donation verification links

Reject misleading 1365 URL contracts and keep item search categories aligned with the candidate that is being recommended.

Constraint: PR #214 round-3 review required TDD fixes for multi-category candidate links, clean install docs, and evidence-safe 1365 wording.

Rejected: Keep broad first-request category on every item URL | It mislabels later-category candidates in multi-category requests.

Rejected: Preserve public baseUrl override | It conflicts with the official 1365 helper contract.

Confidence: high

Scope-risk: narrow

Directive: Keep 1365 URLs framed as best-effort verification assists unless browser-observed 1365 search parameters are documented.

Tested: npm test --workspace donation-place-search; node --test --test-name-pattern 'donation-place-search' scripts/skill-docs.test.js; npm run lint --workspace donation-place-search; npm run typecheck; npm run ci; node smoke for multi-category URLs, malformed limits, baseUrl rejection, and empty category.

Not-tested: Live 1365 parameter behavior; headless HTTP remains documented as unreliable.

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

---------

Co-authored-by: OmX <omx@oh-my-codex.dev>
2026-05-08 15:41:21 +09:00
..
fixtures Merge pull request #122 from NomaDamas/feature/#120 2026-04-16 13:18:28 +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 fix(ktx-booking): make korail2 fallback TrainType import-safe 2026-04-30 01:18:46 +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
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
sillok_search.py Merge dev into main: new skills & proxy enhancements (#72) 2026-04-06 17:44:23 +09:00
skill-docs.test.js Feature/#212 (#214) 2026-05-08 15:41:21 +09:00
subway_lost_property.py Add an official subway lost-property guidance path 2026-04-10 12:05:50 +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_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 Feature/#121 (#127) 2026-04-18 01:08:06 +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 Feature/#171 (#191) 2026-04-30 19:58:55 +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_naver_blog_search.py feat: 네이버 블로그 리서치 스킬 추가 (#107) 2026-04-13 00:06:18 +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_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_zipcode_search.py Keep the zipcode helper directly executable 2026-04-10 10:48:00 +09:00
validate-skills.sh Add Korean scholarship search skill and reporting workflow (#116) 2026-04-16 14:58:58 +09:00
zipcode_search.py Keep the zipcode helper directly executable 2026-04-10 10:48:00 +09:00