feat: own the user-only /issue chat command + repo config#7
Closed
mabry1985 wants to merge 1 commit into
Closed
Conversation
Adds the `/issue` chat control command — the write the model must NOT do autonomously, so it's a user-only command (like /goal), not an agent tool. The plugin registers it through the host's register_chat_command seam. - gh_issue.py: ported, host-free /issue logic — parse flags (--bug/--feature/ --repo/--label/--dry-run), the gate-conformance check (same body rules the CI issue gate enforces), and `gh issue create`. `run_issue_command(rest, *, default_repo)` is the seam entry (the host already matched the token). - __init__.py: register /issue when the host exposes register_chat_command, GUARDED by hasattr so an older host without the seam still loads the tools and just skips /issue (degrade-safe). The handler closes over the plugin's own configured default repo — no host coupling. - manifest: add github.default_repo + github.repos config (+ settings fields) to route /issue and (later) the console views. Repo resolution: explicit --repo > default_repo > first of repos > GITHUB_DEFAULT_REPO/GH_REPO env > error. - tests: gh_issue parse/gate/file coverage; register wiring incl. the legacy-host (no-seam) degrade path; conftest gains a chat-command-aware + a legacy registry. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
👀 Quinn is reviewing — verdict (PASS / WARN / FAIL) + findings to follow. |
There was a problem hiding this comment.
QA Audit — PR #7 | feat: own the user-only /issue chat command + repo config
VERDICT: WARN (CI still queued — non-blocking)
CI Status
- test: queued
Diff Review
/issueregistered viahasattr-guardedregister_chat_commandseam — safe degrade on legacy hostsgh_issue.pysection detectors mirror CI gate regexes, ensuring gate-conformance before filing- Repo resolution chain: explicit
--repo> configdefault_repo> env > error — no silent misrouting - Test suite covers parse/gate/file paths, 64 passed; no unresolved CodeRabbit threads
Observations
- LOW: clawpatch unavailable (repo not in project registry) — structural review limited to diff
- The
_issueclosure capturesdefault_repoat registration time (startup config, no runtime mutation expected — fine)
— Quinn, QA Engineer
|
Submitted COMMENT review on #7. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Brings the
/issuechat control command into the plugin. Filing an issue is a write the model must not do autonomously, so — exactly like the core/goal— it's a user-only chat command, not an agent tool. The plugin owns it via protoAgent's newregister_chat_commandseam.gh_issue.py— ported, host-free/issuelogic: flag parsing (--bug/--feature/--repo/--label/--dry-run), the gate-conformance check (same body rules the CI issue gate enforces — a substantive body + Problem/Motivation; bugs want repro; features want proposal/acceptance), andgh issue create.run_issue_command(rest, *, default_repo)is the seam entry.__init__.py— registers/issuewhen the host exposesregister_chat_command, guarded byhasattrso an older host without the seam still loads the tools and just skips/issue(degrade-safe). The handler closes over the plugin's own configured default repo.github.default_repo+github.reposconfig (and settings fields). Repo resolution (no silent misrouting): explicit--repo>default_repo> first ofrepos>GITHUB_DEFAULT_REPO/GH_REPOenv > error.Host requirement
/issueneeds the host's chat-command seam (protoAgent #1334, unreleased). Rather than hard-gatemin_protoagent_version(which would block the tools on current hosts), the registration ishasattr-guarded so the plugin degrades gracefully: full tools everywhere,/issueonly where the seam exists.Tests
test_gh_issue.py— parse/gate/file coverage (usage, no-repo, bad-repo, dry-run, files-and-returns-URL, default-repo routing, missing-sections block, gh-error surface).test_issue_command.py— register wiring:/issueregistered when the seam is present, skipped (no crash) on a legacy host, and independent of the write gate.ruff check .,ruff format --check .,pytest -q→ 64 passed.🤖 Generated with Claude Code