Opus finding
Dry-run still writes state and article, defeating its purpose as a preview
- skills/fleet-state/SKILL.md:296-298
- skills/fleet-state/SKILL.md:5
This is documented behavior so it is intentional — but it is a contract trap. Most fleet skills' `dry-run` mode is a *preview* that mutates nothing; here `dry-run` writes the same article+state as a real run and only suppresses notify. An operator who runs `dry-run` to test a change is in fact mutating the WoW baseline, so the *next* real run will compute deltas against the dry-run snapshot and silently produce wrong WoW numbers (or report 0 movement when there was real movement). The reasoning in parens ("so a real run later doesn't re-fire the same week") is itself a code smell: the real fix is dedup-by-date, not mutating state in a flag named `dry-run`.
Recommendation
Either rename the flag (e.g. `var=skip-notify`) so behavior matches the name, or make `dry-run` truly read-only and dedup the real run via a date check on `articles/fleet-state-${today}.md` / `last_run` field.