The API returns both "id" (global database PK) and "project_issues_index"
(per-project sequential number). The +list JSON output was a raw API
pass-through, making the database ID the most prominent identifier.
This change normalizes each issue in the list:
- Add "number" field from project_issues_index (matches the web URL)
- Rename "id" to "database_id" to prevent confusion
The "number" field now matches the --number flag used by +view, +close,
+update, and +comment commands.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Use v1 API paths for all webhook endpoints (fixes view/test returning HTML/404)
- Add +tasks command for listing webhook delivery tasks
- Add webhook event validation (10-event whitelist)
- Add webhook type validation (10-type whitelist)
- Add content-type and http-method validation
- Fix update to preserve unspecified fields via fetch-and-merge
- Add event deduplication in parseWebhookEvents
- Add 9 comprehensive unit tests (up from 3)
- Use --http-method flag (maintains backward compatibility with PR #20)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Resolved conflicts between PR #24 (+versions, +version-diff) and PR #26
(+reviews, +review). Unified prReviewsPath() to use existing prV1Path() helper.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add a convenience command to comment on pull requests directly,
without needing to look up the underlying issue ID first.
Internally resolves the PR's issue ID via pr +view, then posts
to the issues journals API.