Opus
`last_checked` jq update produces a JSON array, but lock entries are shown as standalone objects
- skills/skill-update-check/SKILL.md:10-19
- skills/skill-update-check/SKILL.md:92-98
The Step 1 example shows a single object as 'each entry', implying skills.lock is either an array of such objects or NDJSON. The jq filter `[.[] | .last_checked = $at]` assumes skills.lock is already a JSON array. If skills.lock were NDJSON or a single object, this jq invocation would corrupt the file (collapsing it into an unintended array, or erroring). The doc does not specify the top-level structure of skills.lock, which is a data-loss risk: a mismatch will overwrite skills.lock with `skills.lock.tmp` that may not be parseable next run.
Recommendation
Explicitly state that skills.lock is a JSON array `[ {entry}, {entry} ]` and show that form in Step 1. Also gate the `mv` on jq's exit status (`set -e` or `&&` already does this, but add a non-empty check on the tmp file).