v5.16.1 - SkillSpector follow-up
validatetoken.py fails closed on bad expiry: grants whose expiresat is missing, non-string or unparseable are now rejected (previously treated as non-expired). Timezone-naive timestamps are read as UTC. revoketoken.py tr
SkillSpector scan follow-up (ClawHub skill)
Security
validate_token.pyfails closed on bad expiry: grants whoseexpires_atis missing, non-string or unparseable are now rejected (previously treated as non-expired). Timezone-naive timestamps are read as UTC.revoke_token.pytreats such grants as expired;check_permission.py --active-grantsno longer crashes on naive timestamps.- Signing key created owner-only:
data/.signing_keyis created with mode 0o600 viaos.openinstead of write-then-chmod, removing a brief readable window.
Changed
- Script header comments no longer list the modules they do not import (the list itself matched capability keywords).
SKILL.mdfrontmatter declarespermissions: [file_read, file_write, env].skill.jsonaddstriggers, an explicit-onlyinvocationstatement, anddo_not_use_for.check_permission.py --audit-summary --json: per-agent and per-resource counts renamedrequested/granted/denied(top-leveltotal_*unchanged).
Dependencies
Dev/CI only (Dependabot): openai 7.43.0, dotenv 18.0.9, codeql-action, ai-plugin-scanner-action.
Full suite: 3,888 tests across 42 suites; tsc --noEmit clean. See CHANGELOG.