Skip to content
ghqc

Issue Unapprove

ghqc issue unapprove reverses an approval by posting an unapproval comment and reopening the issue. It is typically used when further changes are needed after a file was previously approved.

Terminal window
ghqc issue unapprove

Run ghqc issue unapprove with no issue-specific arguments to enter the full prompt flow.

Terminal window
ghqc issue unapprove

The interactive flow starts by selecting an existing open milestone.

  • Only open milestones are shown
  • If there are no open milestones, the command stops and asks you to create one first
🚫 Welcome to GHQC Unapprove Mode!
? Select a milestone:
> 🎯 PK Review
🎯 Round 2

After choosing the milestone, ghqc loads the issues in that milestone and narrows the list to closed issues only.

  • Open issues are excluded because they are already active
  • The prompt uses autocomplete, so typing part of the file path is usually enough
  • If the milestone has no closed issues, the command stops rather than continuing with an empty prompt
? 🎫 Enter issue title (use Tab for autocomplete):
> scripts/helper.R
scripts/model-fit.R

Unapproval requires an explicit reason.

  • Empty input is rejected
  • The provided reason is included directly in the unapproval comment body
? 📝 Enter reason for unapproval: Found more changes to be made

Before posting, interactive mode prints a short summary of the unapproval configuration.

  • milestone
  • issue number and title
  • reason

To skip interactive mode, you must provide all three:

  • --milestone
  • --file
  • --reason

Any partial combination fails fast instead of dropping into a mixed prompt mode.

Terminal window
ghqc issue unapprove \
--milestone "PK Review" \
--file scripts/helper.R \
--reason "Follow-up changes are required after the latest update."
FlagDescription
-m, --milestoneMilestone name for the QC issue.
-f, --fileRepository-relative file path of the issue to unapprove.
-r, --reasonReason for reopening the issue.
  • The provided milestone and file must resolve to an existing GHQC issue
  • Interactive mode only offers closed issues for selection
  • --reason is required in non-interactive mode
  • The reason must be non-empty in interactive mode

After the unapproval comment is posted, ghqc reopens the issue automatically.

After reopening the issue, ghqc may also print downstream QCs that could be affected by the unapproval.

  • If no downstream dependencies are found, only the reopen result is shown
  • If dependency information is available, ghqc prints a tree of impacted issues
  • If the hosting API does not support the necessary dependency queries, ghqc prints a warning instead

This is especially useful when the issue being unapproved was marked as a gating or previous QC for later work.

🚫 Issue unapproved and reopened!
https://github.com/org/repo/issues/42#issuecomment-192837465
The following QCs may be impacted by this unapproval:
#57 scripts/model-fit.R (Round 2) (gating QC)
└── #63 reports/final-report.qmd (Round 2) (previous QC)

The posted comment is a QC unapproval comment, not a generic GitHub comment.

  • The comment starts with # QC Un-Approval
  • The reason is repeated near the top of the comment body
  • The metadata block records the issue number and unapproval reason
  • After posting the comment, ghqc reopens the GitHub issue
# QC Un-Approval
Follow-up changes are required after the latest update.
## Metadata
* issue: #42
* unapproval reason: Follow-up changes are required after the latest update.