Independent adversarial review of #52 (v0.8.0) caught a schema/implementation mismatch: the advertised InputSchema marked "labels" as required, but Call already treated labels/label_ids as either-or. An MCP client that validates arguments against the advertised schema before dispatch would reject a label_ids-only call as invalid even though the code was written to serve it — and that path had zero test coverage either way. Dropped "labels" from the required array (owner/repo/number remain required); runtime validation already correctly requires at least one of labels/label_ids. Added TestIssueLabelAppliesByIDOnly (asserts ListLabels is never called when IDs are already known) and a schema-lock test for the fixed contract. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>