4e289e3004
* tests: add GAP-01 tar security and GAP-02 SHA256 verification test suites GAP-01 (test_safe_extract.py): - CWE-22 traversal via ../ in tar header names (3 cases) - Absolute path rejection in tar entries (2 cases) - Symlink hardlink skip (2 cases each) - Hardlink skip - Deep traversal rejection - Deep valid path extraction - Empty tar noop - Normal operation smoke test - zipfile placeholder (documents no zip hardening yet) GAP-02 (test_sha256_verification.py): - _is_hex validation (4 cases) - _sha256_file empty/small/large/binary/not-found (5 cases) - _walk_files excludes dirs/deterministic/set equality (3 cases) - verify_plugin_sha256 empty plugin/excludes plugin.yaml/invalid format (3 cases) - compute_plugin_sha256 stable/deterministic order/content changes exclusion (4 cases) - CLI verify-sha256 exit zero/nonzero/file-not-dir/error message (4 cases) - Round-trip compute→verify (1 case) - Mismatch returns False (1 case) Total: 37 new test cases, all passing. 180 passed / 1 skipped across full suite (excluding broken conftest import in test_call_peer_errors.py). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add KI-007 (_is_hex TypeError gap) and KI-008 (test_call_peer_errors conftest) KI-007: _is_hex raises TypeError on non-strings instead of returning False; guard with isinstance(value, str) check. KI-008: test_call_peer_errors.py imports tests.conftest which doesn't exist; fix import or create conftest.py stub. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Molecule AI SDK Lead <sdk-lead@agents.moleculesai.app> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>