Repository navigation
feat(wallet_screening): offline-direct mode and optional live provide… - #461
Conversation
…rs (ARPAHLS#439) Allow screening without ETHERSCAN_API_KEY and soft-fail optional Chainalysis/TRM checks into live_verification, staying on 2.1.0.
rosspeili
left a comment
There was a problem hiding this comment.
LGTM @Hendobox! very clean implementation.
Two minor suggestions before merge:
- In
_generate_report_data(), un-nestrisk_factors.append(...)fromif risk_level != "critical":so live match evidence is still recorded intorisk_factors[]when the address already triggered an offline sanctions hit. - In
_screen_chainalysis(), checkidentifications[0].get("name")oridentifications[0].get("category")sodetailis notNoneon positive hits.
Once these are in,
…RPAHLS#439) Record LIVE_SANCTIONS_MATCH evidence even when offline is already critical, and prefer identification name/category for Chainalysis detail.
|
@rosspeili both review notes are in on the latest commit:
Ready for re-review when you have a moment. After merge on #439: happy to do slice 4 ( |
|
@Hendobox thanks a lot, there is a minor conflict at wallet screening, but can patch later, nothing crazy. I think we can merge this as is as Regarding next steps on #439, yes, please go ahead with a targeted follow-up PR for Slice 4 ( Thank you for the great work on this! This is very clean cut <3 |
Description
Slice 3 of #439: bump
finance/wallet_screeningto 2.1.0 (stay on 2.x per #447 feedback) with offline-direct screening and optional live Chainalysis/TRM verification. Softensinstructions.mdtoward summarize/gate (no schema-wire lecture).Acceptance criteria → diff:
ETHERSCAN_API_KEY→metadata.mode: offline_direct_onlyagainst bundled sanctions + direct malicious entity check →skill.py;test_offline_direct_only_without_etherscan,test_offline_direct_sanctioned_addressCHAINALYSIS_API_KEY/TRM_SANCTIONS_API_KEY→risk_details.live_verification[]; soft-fail intometadata.warnings; live hit elevates tocritical/DENY→_screen_chainalysis/_screen_trm;test_live_trm_sanctioned_elevates_to_critical,test_live_chainalysis_rate_limit_warns.env_vars: Etherscan optional; new optional live keys →manifest.yaml; catalog +docs/usage/api_keys.md2.1.0hubs +docs/skills/finance/wallet_screening.mdOut of this PR ([Skill Upgrade]: finance/wallet_screening v2.0 #439 slice 4):
provenance.report_hash, remaining docs/test-vector polish.Type of Change
skills/.skills/.skillware/core/loader, env, adaptersskillware/cli.py,docs/usage/cli.mdexamples/*.py, agent loops,examples/README.mdpyproject.toml,MANIFEST.inChecklist (all PRs)
Fixes #…orRefs #…)python -m black --check .,flake8, andruff check .pass locally (or CI-equivalent subset)pytest skills/andpytest tests/pass locally when relevantCHANGELOG.mdupdated under[Unreleased]when user-visible behavior changesexamples/README.mdupdated if this PR adds, renames, or removes a runnable scriptpytest tests/test_registry_docs.pywhen skills, examples index, or agent-loops matrix changedpytest tests/test_skill_docs.pywhen catalog Usage Examples or provider snippets changedNew or updated skill
Skip unless this PR adds or changes files under
skills/.Bundle and metadata
skills/<category>/<skill_name>/(fromtemplates/python_skill/or equivalent)manifest.yaml:name(full ID),version,description,parameters,constitution, realissuershort_description,issuer.github,issuer.org,requirements,env_varsEffect, Directive, Assurance
skill.py(Effect; no ad-hoc LLM-generated execution paths)instructions.md(Directive) explains when and how to use the skillcard.json(Presentation) issuer matches manifest when presenttest_skill.py(Assurance) covers execution and schema expectationsSkillLoader.load_skill("<category>/<skill_name>")succeeds (or deps documented)Documentation and catalog
docs/skills/<category>/<skill_name>.md, category hub row, row indocs/skills/README.md, anddocs/sitemap.mdConstitution and safety (skills only)
Read-only screening. Offline path uses bundled public lists only. Live Chainalysis/TRM are optional and soft-fail; they do not sign or broadcast. Hosts should halt on
DENYand require a person onREVIEW. Not legal advice.Related Issues
Refs #439