Add getIssueState and reopenIssue to issues-api
Extends the issues API layer with two new functions needed for full
issue lifecycle management:
- getIssueState: queries sh.tangled.repo.issue.state records to
determine open/closed status, defaulting to 'open' when no records
exist. Filters by issue URI and uses the most recent state record.
- reopenIssue: mirrors closeIssue by creating a state record with
state 'sh.tangled.repo.issue.state.open'
Includes tests covering state filtering, multi-record precedence,
unauthenticated error paths, and correct record creation.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>