[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FMBYRHM8WWMETHFQP4B0W2":3,"skill-same:01M6FMBYRHM8WWMETHFQP4B0W2":102},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":63,"install":64,"resources":77},"01M6FMBYRHM8WWMETHFQP4B0W2","sui-coverage",null,"Analyze Sui Move test coverage, identify untested code, write missing tests, and perform security audits. Includes Python tools for parsing coverage output and generating reports.","kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Feasonc13\u002Fsui-coverage\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"sui coverage","sui","coverage","write","move","output","missing","tests","reports","test coverage","python","python3","analyze","parsing","Tools","demo","code","test","security","github","2026-11-10 10:12:30",false,"---\nname: sui-coverage\ndescription: Analyze Sui Move test coverage, identify untested code, write missing tests, and perform security audits. Includes Python tools for parsing coverage output and generating reports.\nhomepage: https:\u002F\u002Fgithub.com\u002FEasonC13-agent\u002Fsui-coverage-demo\nmetadata:\n  openclaw:\n    emoji: \"?\"\n    requires:\n      bins: [\"python3\", \"sui\"]\n---\n\n# Sui Coverage Skill\n\nAnalyze and automatically improve Sui Move test coverage with security analysis.\n\n## Prerequisites\n\n### Install Sui CLI\n\n```bash\n# macOS (recommended)\nbrew install sui\n\n# Other platforms: see official docs\n# https:\u002F\u002Fdocs.sui.io\u002Fguides\u002Fdeveloper\u002Fgetting-started\u002Fsui-install\n```\n\nVerify:\n```bash\nsui --version\n```\n\n## Quick Reference\n\n```bash\n# Location of tools\nSKILL_DIR=~\u002Fclawd\u002Fskills\u002Fsui-coverage\n\n# Full workflow\ncd \u002Fpath\u002Fto\u002Fmove\u002Fpackage\nsui move test --coverage --trace\npython3 $SKILL_DIR\u002Fanalyze_source.py -m \u003Cmodule> -o coverage.md\n```\n\n## Workflow: Auto-Improve Test Coverage\n\n### Step 1: Run Coverage Analysis\n\n```bash\ncd \u003Cpackage_path>\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m \u003Cmodule_name> -o coverage.md\n```\n\n### Step 2: Read the Coverage Report\n\nRead the generated `coverage.md` to identify:\n- ? **Uncalled functions** - Functions never executed\n- ? **Uncovered assertions** - `assert!()` failure paths not tested\n- ? **Uncovered branches** - `if\u002Felse` paths not taken\n\n### Step 3: Write Missing Tests\n\nFor each uncovered item, write a test:\n\n#### A. Uncalled Function\n```move\n#[test]\nfun test_\u003Cfunction_name>() {\n    \u002F\u002F Setup\n    let mut ctx = tx_context::dummy();\n    \u002F\u002F Call the uncovered function\n    \u003Cfunction_name>(...);\n    \u002F\u002F Assert expected behavior\n}\n```\n\n#### B. Assertion Failure Path (expect_failure)\n```move\n#[test]\n#[expected_failure(abort_code = \u003CERROR_CODE>)]\nfun test_\u003Cfunction>_fails_when_\u003Ccondition>() {\n    let mut ctx = tx_context::dummy();\n    \u002F\u002F Setup state that triggers the assertion failure\n    \u003Cfunction_call_that_should_fail>();\n}\n```\n\n#### C. Branch Coverage (if\u002Felse)\n```move\n#[test]\nfun test_\u003Cfunction>_when_\u003Ccondition_true>() { ... }\n\n#[test]  \nfun test_\u003Cfunction>_when_\u003Ccondition_false>() { ... }\n```\n\n### Step 4: Verify Coverage Improved\n\n```bash\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m \u003Cmodule_name>\n```\n\n---\n\n## Tools\n\n### 1. analyze_source.py (Primary Tool)\n\n```bash\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py --module \u003Cname> [options]\n\nOptions:\n  -m, --module    Module name (required)\n  -p, --path      Package path (default: .)\n  -o, --output    Output file (e.g., coverage.md)\n  --json          JSON output\n  --markdown      Markdown to stdout\n```\n\n### 2. analyze.py (LCOV Statistics)\n\n```bash\nsui move coverage lcov\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze.py lcov.info -f \"\u003Cpackage>\" -s sources\u002F\n\nOptions:\n  -f, --filter       Filter by path pattern\n  -s, --source-dir   Source directory for context\n  -i, --issues-only  Only show files with issues\n  -j, --json         JSON output\n```\n\n### 3. parse_bytecode.py (Low-level)\n\n```bash\nsui move coverage bytecode --module \u003Cname> | python3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fparse_bytecode.py\n```\n\n---\n\n## Common Patterns\n\n### Testing Assertion Failures\n\n```move\n\u002F\u002F Source code:\npublic fun withdraw(balance: &mut u64, amount: u64) {\n    assert!(*balance >= amount, EInsufficientBalance);  \u002F\u002F ← This failure path\n    *balance = *balance - amount;\n}\n\n\u002F\u002F Test for the failure path:\n#[test]\n#[expected_failure(abort_code = EInsufficientBalance)]\nfun test_withdraw_insufficient_balance() {\n    let mut balance = 50;\n    withdraw(&mut balance, 100);  \u002F\u002F Should fail: 50 \u003C 100\n}\n```\n\n### Testing All Branches\n\n```move\n\u002F\u002F Source code:\npublic fun classify(value: u64): u8 {\n    if (value == 0) {\n        0\n    } else if (value \u003C 100) {\n        1\n    } else {\n        2\n    }\n}\n\n\u002F\u002F Tests for all branches:\n#[test]\nfun test_classify_zero() {\n    assert!(classify(0) == 0, 0);\n}\n\n#[test]\nfun test_classify_small() {\n    assert!(classify(50) == 1, 0);\n}\n\n#[test]\nfun test_classify_large() {\n    assert!(classify(100) == 2, 0);\n}\n```\n\n### Testing Object Lifecycle\n\n```move\n#[test]\nfun test_full_lifecycle() {\n    let mut ctx = tx_context::dummy();\n    \n    \u002F\u002F Create\n    let obj = create(&mut ctx);\n    assert!(get_value(&obj) == 0, 0);\n    \n    \u002F\u002F Modify\n    increment(&mut obj);\n    assert!(get_value(&obj) == 1, 0);\n    \n    \u002F\u002F Destroy\n    destroy(obj);\n}\n```\n\n---\n\n## Error Code Reference\n\nWhen writing `#[expected_failure]` tests, use the error constant name:\n\n```move\n\u002F\u002F If the module defines:\nconst EInvalidInput: u64 = 1;\nconst ENotAuthorized: u64 = 2;\n\n\u002F\u002F Use in test:\n#[expected_failure(abort_code = EInvalidInput)]\nfun test_invalid_input() { ... }\n\n\u002F\u002F Or use the module-qualified name:\n#[expected_failure(abort_code = my_module::EInvalidInput)]\nfun test_invalid_input() { ... }\n```\n\n---\n\n## Example: Full Auto-Coverage Session\n\n```bash\n# 1. Analyze current coverage\ncd ~\u002Fproject\u002Fmy_package\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m my_module -o coverage.md\n\n# 2. Review what's missing\ncat coverage.md\n# Shows:\n# - decrement() not called\n# - assert!(value > 0, EValueZero) failure not tested\n\n# 3. Add tests to sources\u002Fmy_module.move or tests\u002Fmy_module_tests.move\n# (write the missing tests)\n\n# 4. Verify improvement\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m my_module\n\n# 5. Repeat until 100% coverage\n```\n\n---\n\n## Integration with Agent Workflow\n\nWhen asked to improve test coverage:\n\n1. **Run analysis** - Get current coverage state\n2. **Read source** - Understand the module's logic\n3. **Identify gaps** - List uncovered functions\u002Fbranches\u002Fassertions\n4. **Security review** - Analyze for vulnerabilities while writing tests\n5. **Write tests** - Create tests for each gap + security edge cases\n6. **Report findings** - Document any security concerns discovered\n7. **Verify** - Re-run coverage to confirm improvement\n\nAlways commit test improvements:\n```bash\ngit add sources\u002F tests\u002F\ngit commit -m \"Improve test coverage for \u003Cmodule>\"\n```\n\n---\n\n## Security Analysis During Testing\n\n**Writing tests = Understanding the contract = Finding vulnerabilities**\n\nWhen writing tests, actively look for these issues:\n\n### 1. Access Control\n```\nQuestions to ask:\n- Who can call this function?\n- Should there be owner\u002Fadmin checks?\n- Can unauthorized users manipulate state?\n\nRed flags:\n- Public functions that modify critical state without checks\n- Missing capability\u002Fwitness patterns\n```\n\n### 2. Integer Overflow\u002FUnderflow\n```\nQuestions to ask:\n- What happens at u64::MAX?\n- What happens when subtracting from 0?\n- Are arithmetic operations checked?\n\nTest pattern:\n#[test]\nfun test_overflow_boundary() {\n    \u002F\u002F Test with max values\n}\n```\n\n### 3. State Manipulation\n```\nQuestions to ask:\n- Can state be left in inconsistent state?\n- Are all state changes atomic?\n- Can partial failures corrupt data?\n\nRed flags:\n- Multiple state changes without rollback\n- Shared objects without proper locking\n```\n\n### 4. Economic Exploits\n```\nQuestions to ask:\n- Can someone extract more value than deposited?\n- Are there rounding errors that can be exploited?\n- Flash loan attack vectors?\n\nRed flags:\n- Price calculations without slippage protection\n- Unbounded loops over user-controlled data\n```\n\n### 5. Denial of Service\n```\nQuestions to ask:\n- Can someone block legitimate users?\n- Are there unbounded operations?\n- Can storage be filled maliciously?\n\nRed flags:\n- Vectors that grow unbounded\n- Loops over external data\n```\n\n### Security Report Template\n\nWhen analyzing a module, generate a security report:\n\n```markdown\n## Security Analysis: \u003Cmodule_name>\n\n### Summary\n- Risk Level: [Low\u002FMedium\u002FHigh\u002FCritical]\n- Issues Found: X\n\n### Findings\n\n#### [SEVERITY] Issue Title\n- **Location:** Line XX\n- **Description:** What the issue is\n- **Impact:** What could happen\n- **Recommendation:** How to fix\n\n### Tested Edge Cases\n- [ ] Overflow at max values\n- [ ] Underflow at zero\n- [ ] Unauthorized access attempts\n- [ ] Empty\u002Fnull inputs\n- [ ] Reentrancy scenarios\n```\n\n### Example: Security-Aware Test\n\n```move\n\u002F\u002F SECURITY: Testing that non-owner cannot withdraw\n#[test]\n#[expected_failure(abort_code = ENotOwner)]\nfun test_unauthorized_withdraw() {\n    \u002F\u002F Setup: Create vault owned by ALICE\n    \u002F\u002F Action: BOB tries to withdraw\n    \u002F\u002F Expected: Should fail with ENotOwner\n}\n\n\u002F\u002F SECURITY: Testing overflow protection\n#[test]\nfun test_deposit_overflow_protection() {\n    \u002F\u002F Deposit near u64::MAX\n    \u002F\u002F Verify no overflow occurs\n}\n\n\u002F\u002F SECURITY: Testing economic invariant\n#[test]\nfun test_total_supply_invariant() {\n    \u002F\u002F After any operations:\n    \u002F\u002F sum(all_balances) == total_supply\n}\n```\n\n---\n\n## Full Workflow with Security\n\n```bash\n# 1. Coverage analysis\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m \u003Cmodule> -o coverage.md\n\n# 2. While writing tests, document security findings\n# Create SECURITY.md alongside coverage.md\n\n# 3. After tests pass, summarize:\n# - Coverage: X% → 100%\n# - Security issues found: N\n# - Recommendations: ...\n```\n","# Sui Coverage Skill\n\nAnalyze and automatically improve Sui Move test coverage with security analysis.\n\n## Prerequisites\n\n### Install Sui CLI\n\n```bash\n# macOS (recommended)\nbrew install sui\n\n# Other platforms: see official docs\n# https:\u002F\u002Fdocs.sui.io\u002Fguides\u002Fdeveloper\u002Fgetting-started\u002Fsui-install\n```\n\nVerify:\n```bash\nsui --version\n```\n\n## Quick Reference\n\n```bash\n# Location of tools\nSKILL_DIR=~\u002Fclawd\u002Fskills\u002Fsui-coverage\n\n# Full workflow\ncd \u002Fpath\u002Fto\u002Fmove\u002Fpackage\nsui move test --coverage --trace\npython3 $SKILL_DIR\u002Fanalyze_source.py -m \u003Cmodule> -o coverage.md\n```\n\n## Workflow: Auto-Improve Test Coverage\n\n### Step 1: Run Coverage Analysis\n\n```bash\ncd \u003Cpackage_path>\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m \u003Cmodule_name> -o coverage.md\n```\n\n### Step 2: Read the Coverage Report\n\nRead the generated `coverage.md` to identify:\n- ? **Uncalled functions** - Functions never executed\n- ? **Uncovered assertions** - `assert!()` failure paths not tested\n- ? **Uncovered branches** - `if\u002Felse` paths not taken\n\n### Step 3: Write Missing Tests\n\nFor each uncovered item, write a test:\n\n#### A. Uncalled Function\n```move\n#[test]\nfun test_\u003Cfunction_name>() {\n    \u002F\u002F Setup\n    let mut ctx = tx_context::dummy();\n    \u002F\u002F Call the uncovered function\n    \u003Cfunction_name>(...);\n    \u002F\u002F Assert expected behavior\n}\n```\n\n#### B. Assertion Failure Path (expect_failure)\n```move\n#[test]\n#[expected_failure(abort_code = \u003CERROR_CODE>)]\nfun test_\u003Cfunction>_fails_when_\u003Ccondition>() {\n    let mut ctx = tx_context::dummy();\n    \u002F\u002F Setup state that triggers the assertion failure\n    \u003Cfunction_call_that_should_fail>();\n}\n```\n\n#### C. Branch Coverage (if\u002Felse)\n```move\n#[test]\nfun test_\u003Cfunction>_when_\u003Ccondition_true>() { ... }\n\n#[test]  \nfun test_\u003Cfunction>_when_\u003Ccondition_false>() { ... }\n```\n\n### Step 4: Verify Coverage Improved\n\n```bash\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m \u003Cmodule_name>\n```\n\n---\n\n## Tools\n\n### 1. analyze_source.py (Primary Tool)\n\n```bash\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py --module \u003Cname> [options]\n\nOptions:\n  -m, --module    Module name (required)\n  -p, --path      Package path (default: .)\n  -o, --output    Output file (e.g., coverage.md)\n  --json          JSON output\n  --markdown      Markdown to stdout\n```\n\n### 2. analyze.py (LCOV Statistics)\n\n```bash\nsui move coverage lcov\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze.py lcov.info -f \"\u003Cpackage>\" -s sources\u002F\n\nOptions:\n  -f, --filter       Filter by path pattern\n  -s, --source-dir   Source directory for context\n  -i, --issues-only  Only show files with issues\n  -j, --json         JSON output\n```\n\n### 3. parse_bytecode.py (Low-level)\n\n```bash\nsui move coverage bytecode --module \u003Cname> | python3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fparse_bytecode.py\n```\n\n---\n\n## Common Patterns\n\n### Testing Assertion Failures\n\n```move\n\u002F\u002F Source code:\npublic fun withdraw(balance: &mut u64, amount: u64) {\n    assert!(*balance >= amount, EInsufficientBalance);  \u002F\u002F ← This failure path\n    *balance = *balance - amount;\n}\n\n\u002F\u002F Test for the failure path:\n#[test]\n#[expected_failure(abort_code = EInsufficientBalance)]\nfun test_withdraw_insufficient_balance() {\n    let mut balance = 50;\n    withdraw(&mut balance, 100);  \u002F\u002F Should fail: 50 \u003C 100\n}\n```\n\n### Testing All Branches\n\n```move\n\u002F\u002F Source code:\npublic fun classify(value: u64): u8 {\n    if (value == 0) {\n        0\n    } else if (value \u003C 100) {\n        1\n    } else {\n        2\n    }\n}\n\n\u002F\u002F Tests for all branches:\n#[test]\nfun test_classify_zero() {\n    assert!(classify(0) == 0, 0);\n}\n\n#[test]\nfun test_classify_small() {\n    assert!(classify(50) == 1, 0);\n}\n\n#[test]\nfun test_classify_large() {\n    assert!(classify(100) == 2, 0);\n}\n```\n\n### Testing Object Lifecycle\n\n```move\n#[test]\nfun test_full_lifecycle() {\n    let mut ctx = tx_context::dummy();\n    \n    \u002F\u002F Create\n    let obj = create(&mut ctx);\n    assert!(get_value(&obj) == 0, 0);\n    \n    \u002F\u002F Modify\n    increment(&mut obj);\n    assert!(get_value(&obj) == 1, 0);\n    \n    \u002F\u002F Destroy\n    destroy(obj);\n}\n```\n\n---\n\n## Error Code Reference\n\nWhen writing `#[expected_failure]` tests, use the error constant name:\n\n```move\n\u002F\u002F If the module defines:\nconst EInvalidInput: u64 = 1;\nconst ENotAuthorized: u64 = 2;\n\n\u002F\u002F Use in test:\n#[expected_failure(abort_code = EInvalidInput)]\nfun test_invalid_input() { ... }\n\n\u002F\u002F Or use the module-qualified name:\n#[expected_failure(abort_code = my_module::EInvalidInput)]\nfun test_invalid_input() { ... }\n```\n\n---\n\n## Example: Full Auto-Coverage Session\n\n```bash\n# 1. Analyze current coverage\ncd ~\u002Fproject\u002Fmy_package\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m my_module -o coverage.md\n\n# 2. Review what's missing\ncat coverage.md\n# Shows:\n# - decrement() not called\n# - assert!(value > 0, EValueZero) failure not tested\n\n# 3. Add tests to sources\u002Fmy_module.move or tests\u002Fmy_module_tests.move\n# (write the missing tests)\n\n# 4. Verify improvement\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m my_module\n\n# 5. Repeat until 100% coverage\n```\n\n---\n\n## Integration with Agent Workflow\n\nWhen asked to improve test coverage:\n\n1. **Run analysis** - Get current coverage state\n2. **Read source** - Understand the module's logic\n3. **Identify gaps** - List uncovered functions\u002Fbranches\u002Fassertions\n4. **Security review** - Analyze for vulnerabilities while writing tests\n5. **Write tests** - Create tests for each gap + security edge cases\n6. **Report findings** - Document any security concerns discovered\n7. **Verify** - Re-run coverage to confirm improvement\n\nAlways commit test improvements:\n```bash\ngit add sources\u002F tests\u002F\ngit commit -m \"Improve test coverage for \u003Cmodule>\"\n```\n\n---\n\n## Security Analysis During Testing\n\n**Writing tests = Understanding the contract = Finding vulnerabilities**\n\nWhen writing tests, actively look for these issues:\n\n### 1. Access Control\n```\nQuestions to ask:\n- Who can call this function?\n- Should there be owner\u002Fadmin checks?\n- Can unauthorized users manipulate state?\n\nRed flags:\n- Public functions that modify critical state without checks\n- Missing capability\u002Fwitness patterns\n```\n\n### 2. Integer Overflow\u002FUnderflow\n```\nQuestions to ask:\n- What happens at u64::MAX?\n- What happens when subtracting from 0?\n- Are arithmetic operations checked?\n\nTest pattern:\n#[test]\nfun test_overflow_boundary() {\n    \u002F\u002F Test with max values\n}\n```\n\n### 3. State Manipulation\n```\nQuestions to ask:\n- Can state be left in inconsistent state?\n- Are all state changes atomic?\n- Can partial failures corrupt data?\n\nRed flags:\n- Multiple state changes without rollback\n- Shared objects without proper locking\n```\n\n### 4. Economic Exploits\n```\nQuestions to ask:\n- Can someone extract more value than deposited?\n- Are there rounding errors that can be exploited?\n- Flash loan attack vectors?\n\nRed flags:\n- Price calculations without slippage protection\n- Unbounded loops over user-controlled data\n```\n\n### 5. Denial of Service\n```\nQuestions to ask:\n- Can someone block legitimate users?\n- Are there unbounded operations?\n- Can storage be filled maliciously?\n\nRed flags:\n- Vectors that grow unbounded\n- Loops over external data\n```\n\n### Security Report Template\n\nWhen analyzing a module, generate a security report:\n\n```markdown\n## Security Analysis: \u003Cmodule_name>\n\n### Summary\n- Risk Level: [Low\u002FMedium\u002FHigh\u002FCritical]\n- Issues Found: X\n\n### Findings\n\n#### [SEVERITY] Issue Title\n- **Location:** Line XX\n- **Description:** What the issue is\n- **Impact:** What could happen\n- **Recommendation:** How to fix\n\n### Tested Edge Cases\n- [ ] Overflow at max values\n- [ ] Underflow at zero\n- [ ] Unauthorized access attempts\n- [ ] Empty\u002Fnull inputs\n- [ ] Reentrancy scenarios\n```\n\n### Example: Security-Aware Test\n\n```move\n\u002F\u002F SECURITY: Testing that non-owner cannot withdraw\n#[test]\n#[expected_failure(abort_code = ENotOwner)]\nfun test_unauthorized_withdraw() {\n    \u002F\u002F Setup: Create vault owned by ALICE\n    \u002F\u002F Action: BOB tries to withdraw\n    \u002F\u002F Expected: Should fail with ENotOwner\n}\n\n\u002F\u002F SECURITY: Testing overflow protection\n#[test]\nfun test_deposit_overflow_protection() {\n    \u002F\u002F Deposit near u64::MAX\n    \u002F\u002F Verify no overflow occurs\n}\n\n\u002F\u002F SECURITY: Testing economic invariant\n#[test]\nfun test_total_supply_invariant() {\n    \u002F\u002F After any operations:\n    \u002F\u002F sum(all_balances) == total_supply\n}\n```\n\n---\n\n## Full Workflow with Security\n\n```bash\n# 1. Coverage analysis\nsui move test --coverage --trace\npython3 ~\u002Fclawd\u002Fskills\u002Fsui-coverage\u002Fanalyze_source.py -m \u003Cmodule> -o coverage.md\n\n# 2. While writing tests, document security findings\n# Create SECURITY.md alongside coverage.md\n\n# 3. After tests pass, summarize:\n# - Coverage: X% → 100%\n# - Security issues found: N\n# - Recommendations: ...\n```\n",{"name":5,"homepage":51,"metadata":52,"description":7},"https:\u002F\u002Fgithub.com\u002FEasonC13-agent\u002Fsui-coverage-demo",{"openclaw":53},{"emoji":54,"requires":55},"?",{"bins":56},[37,27],"main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Feasonc13\u002Fsui-coverage",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add kbarbel640-del\u002Fskills --skill sui-coverage",{"tool":70,"command":71},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill sui-coverage",{"tool":73,"command":74},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill sui-coverage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Feasonc13\u002Fsui-coverage\u002FSKILL.md",true,[78,84,90,94,98],{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"_meta.json","REFERENCE","参考文档",456,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Feasonc13\u002Fsui-coverage\u002F_meta.json",{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"analyze_source.py","SCRIPT","脚本",11414,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Feasonc13\u002Fsui-coverage\u002Fanalyze_source.py",{"path":91,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":92,"sourceHtmlUrl":93},"analyze.py",16178,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Feasonc13\u002Fsui-coverage\u002Fanalyze.py",{"path":95,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":96,"sourceHtmlUrl":97},"parse_bytecode.py",6506,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Feasonc13\u002Fsui-coverage\u002Fparse_bytecode.py",{"path":99,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":100,"sourceHtmlUrl":101},"parse_source.py",6429,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Feasonc13\u002Fsui-coverage\u002Fparse_source.py",[103,134,158,179,185,205],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":114,"publishedAt":46},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133],"crowd prompting","prompting","api","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":46},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[140],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[142,117,143,38,144,145,146,147,148,149,150,151,152,153,154,155,156,122,157],"dilemm ai","arena","browser","openclaw agent","create","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking","use",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":167,"publishedAt":46},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[164],{"categoryNo":165,"categoryName":166,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",[168,169,170,171,172,173,174,118,175,155,157,176,117,177,178],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":180,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":184,"publishedAt":46},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[183],{"categoryNo":165,"categoryName":166,"taxonomyType":20,"taxonomyTypeDesc":21},[171,170,169,168,178,173,174,118,172,155,157,175,176,117,177],{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":191,"publishedAt":46},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[192,193,194,195,196,197,198,199,200,201,202,203,204],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":206,"name":207,"nameZh":6,"description":208,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":209,"categories":210,"keywords":215,"publishedAt":46},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[211,212],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":213,"categoryName":214,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000037","律师与法务",[216,217,218,219,118,220,221,57,222,176,223,224,225,226,227,131,228,229,45],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance"]