Skip to content

feat: add get-pr-status command to dev-workflow - #193

Merged
NTCoding merged 10 commits into
mainfrom
issue-192-add-get-pr-status-command-to-d
Jan 17, 2026
Merged

NTCoding merged 10 commits into
mainfrom
issue-192-add-get-pr-status-command-to-d

Conversation

@NTCoding

@NTCoding NTCoding commented Jan 17, 2026 •

Copy link
Copy Markdown
Owner

References

PR #186 - discovered during post-merge-completion workflow

Summary

The /post-merge-completion skill needs to check if a PR is merged, but get-pr-feedback is designed for active development (finding open PRs with feedback to address). Create a separate get-pr-status command that returns PR lifecycle state.

Full Details

Problem

The post-merge-completion instructions use a GitHub CLI command that is blocked by hooks. The workaround (using the API directly) works but isn't documented.

get-pr-feedback cannot be reused because:

  1. It searches for open PRs - merged PRs won't be found
  2. Naming implies 'feedback to address' not 'lifecycle status'
  3. Adding merged alongside mergeable creates semantic confusion

Solution

Create get-pr-status command that returns:

{
  "state": "merged" | "open" | "closed" | "not_found",
  "prNumber": 186,
  "prUrl": "..."
}

Files to modify

  • tools/dev-workflow/get-pr-status/ - new command directory
  • tools/dev-workflow/project.json - add target
  • .claude/commands/post-merge-completion.md - update instructions to use new command

Acceptance Criteria

  • Create get-pr-status command in tools/dev-workflow
  • Command returns state: merged | open | closed | not_found
  • Command returns prNumber and prUrl when PR exists
  • Add nx target for the command
  • Update /post-merge-completion instructions to use get-pr-status
  • Command works for both issue branches and non-issue branches

Summary by CodeRabbit

  • New Features

    • PR feedback now reports explicit PR state, PR URL, and richer mergeability details.
    • Task failures record per-step diagnostics and reference failed steps and log files.
  • Improvements

    • CI monitoring now verifies commit SHA during checks.
    • Commit titles are validated against a conventional commit format.
  • Documentation

    • Added a verification workflow guide for validating task completion.
    • Hook messages now require remediation evidence or a detailed explanation.

✏️ Tip: You can customize this high-level summary in your review settings.

NTCoding and others added 2 commits January 17, 2026 14:30
- Add get-pr-status command to check PR lifecycle state (merged/open/closed/not_found)
- Refactor Step type from function to object with name and execute properties
- Add failedStep tracking to workflow results
- Write verbose errors to log file on failure, return short JSON response
- Update format-complete-task-result to include failedStep and logFile
- Add task-check.md agent for code review

Co-Authored-By: Claude <[email protected]>
- Extract DELETED_USER_PLACEHOLDER constant to replace inline comment
- Rename PRStatus to PRFeedbackStatus in get-pr-feedback for clarity
- Rename PRStatus to PRLifecycleStatus in get-pr-status for clarity

Co-Authored-By: Claude <[email protected]>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jan 17, 2026 •

Copy link
Copy Markdown

Deploying living-architecture with  Cloudflare Pages  Cloudflare Pages

Latest commit: bda85bb
Status: ✅  Deploy successful!
Preview URL: https://191aa320.living-architecture.pages.dev
Branch Preview URL: https://issue-192-add-get-pr-status.living-architecture.pages.dev

View logs

@coderabbitai

coderabbitai Bot commented Jan 17, 2026 •

Copy link
Copy Markdown

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

📝 Walkthrough

Walkthrough

Refactors workflow steps to object-shaped Steps with named execute, adds PR state/mergeable tracking and head SHA handling, updates PR resolution and commit validation, enhances failure reporting with failedStep and per-step log files, and extends get-pr-feedback context, docs, and CLI command usage.

Changes

Cohort / File(s) Summary
Documentation & Hooks
\.claude/agents/task-check.md, \.claude/commands/post-merge-completion.md, \.claude/hooks/task-completion-reminder.sh, tools/dev-workflow/CLAUDE.md
New task verification doc; post-merge command changed to pnpm nx run dev-workflow:get-pr-feedback; hook reminder text tightened; get-pr-feedback sample response and docs extended with state, prUrl, mergeableState and mergeable semantics.
Workflow Core & Runner
tools/dev-workflow/workflow-runner/workflow-runner.ts
Introduces Step interface { name, execute }; runner now calls step.execute(ctx); failedStep added to WorkflowResult and populated on step failure.
Step Exports (refactor)
tools/dev-workflow/complete-task/steps/code-review.ts, tools/dev-workflow/complete-task/steps/fetch-pr-feedback.ts, tools/dev-workflow/complete-task/steps/submit-pr.ts, tools/dev-workflow/complete-task/steps/verify-build.ts, tools/dev-workflow/get-pr-feedback/steps/fetch-feedback.ts
Several steps converted from function exports to { name, execute } objects; fetch-feedback now returns richer PRFeedbackStatus; submit-pr now captures headSha() and passes it to CI watch.
Complete Task Flow & Results
tools/dev-workflow/complete-task/complete-task.ts, tools/dev-workflow/complete-task/format-complete-task-result.ts, tools/dev-workflow/complete-task/resolve-pr-details.ts
formatCompleteTaskResult now receives full CompleteTaskContext, writes per-step log files on certain failures, and surfaces failedStep and logFile; resolvePRDetails signature changed (branch removed) and enforces conventional commit validation.
Get PR Feedback Context & Flow
tools/dev-workflow/get-pr-feedback/get-pr-feedback.ts, tools/dev-workflow/get-pr-feedback/steps/fetch-feedback.ts
Context schema extended with prUrl and prState; PR lookup uses findPRForBranchWithState returning composite prInfo; fetch-feedback builds status with state, mergeableState, prUrl, unresolved feedback and counts.
External Clients & Git Helpers
tools/dev-workflow/external-clients/github.ts, tools/dev-workflow/external-clients/git.ts
GitHub client: added PRState, PRWithState, findPRForBranchWithState, getMergeableState, DELETED_USER_PLACEHOLDER, and watchCI now accepts optional expectedSha and returns richer CI failure details. Git client: added headSha() to return current HEAD SHA.
Conventions
tools/dev-workflow/conventions/commit.ts
Added validateConventionalCommit(title) enforcing conventional-commit pattern and throwing WorkflowError on mismatch.
Minor API/Signature Adjustments
tools/dev-workflow/complete-task/format-complete-task-result.ts, other callers
Public signatures updated: formatCompleteTaskResult(result, ctx: CompleteTaskContext) and resolvePRDetails(issueNumber, taskDetails); CompleteTaskResult extended with optional failedStep and logFile.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Runner as WorkflowRunner
  participant Step as Step{name, execute}
  participant Git as Git Client
  participant GH as GitHub Client
  participant CI as CI Watcher
  participant Formatter as formatCompleteTaskResult

  Runner->>Step: step.execute(ctx)
  Step->>Git: headSha() (submit-pr)
  Step->>GH: findPRForBranchWithState(branch) / getMergeableState(prNumber)
  Step->>CI: watchCI(prNumber, expectedSha)
  CI-->>Step: CI status (success / failure details)
  Step-->>Runner: StepResult (ok | failed + details)
  Runner->>Formatter: formatCompleteTaskResult(result, ctx)
  Formatter->>Runner: CompleteTaskResult (includes failedStep? logFile?)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

Possibly related PRs

Poem

🐰 I hopped through steps and added a name,
Gave each its execute and chased CI’s flame.
I fetched PR states and tucked logs in a file,
Left breadcrumbs for failures and cleaned every mile.
A small rabbit’s cheer for workflows made tame.

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add get-pr-status command to dev-workflow' clearly and concisely summarizes the main change in the PR: introducing a new get-pr-status command for the dev-workflow tool.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
🧪 No relevant tests
🔒 Security concerns

Path traversal / arbitrary file write:
formatCompleteTaskResult writes ${ctx.reviewDir}/${failedStep}.log. If ctx.reviewDir or failedStep can be influenced unexpectedly, this could write files outside the intended directory (e.g., ../...). Ensure failedStep is constrained to known step names and use safe path joining/validation.

⚡ Recommended focus areas for review

Robustness

The failure-path writes a log file synchronously to ctx.reviewDir using failedStep in the filename. Validate that the directory is guaranteed to exist, that failedStep values are safe for filenames, and that failures during writeFileSync won’t mask the original workflow error. Consider ensuring the directory exists and handling file-write errors gracefully.

import { writeFileSync } from 'node:fs'
import type { WorkflowResult } from '../workflow-runner/workflow-runner'
import type { CompleteTaskContext } from './complete-task'

const nextActionSchema = z.enum(['fix_errors', 'fix_review', 'resolve_feedback', 'done'])
type NextAction = z.infer<typeof nextActionSchema>

const failedReviewerSchema = z.object({
  name: z.string(),
  summary: z.string(),
  reportPath: z.string(),
})
type FailedReviewer = z.infer<typeof failedReviewerSchema>

const failedReviewerArraySchema = z.array(failedReviewerSchema)

const completeTaskResultSchema = z.object({
  success: z.boolean(),
  nextAction: nextActionSchema,
  nextInstructions: z.string(),
  output: z.unknown().optional(),
  prUrl: z.string().optional(),
  failedStep: z.string().optional(),
  logFile: z.string().optional(),
  failedReviewers: z.array(failedReviewerSchema).optional(),
})
export type CompleteTaskResult = z.infer<typeof completeTaskResultSchema>

function isFailedReviewerArray(value: unknown): value is FailedReviewer[] {
  return failedReviewerArraySchema.safeParse(value).success
}

const errorDetailsSchema = z.object({
  type: z.enum(['fix_errors', 'fix_review', 'resolve_feedback', 'done']),
  details: z.unknown(),
})

type ErrorDetails = z.infer<typeof errorDetailsSchema>

function isErrorDetails(value: unknown): value is ErrorDetails {
  return errorDetailsSchema.safeParse(value).success
}

function formatFailureInstructions(error: unknown): {
  nextAction: NextAction
  instructions: string
  failedReviewers?: FailedReviewer[]
} {
  if (!isErrorDetails(error)) {
    return {
      nextAction: 'fix_errors',
      instructions: String(error),
    }
  }

  const {
    type, details 
  } = error

  if (type === 'fix_errors') {
    return {
      nextAction: 'fix_errors',
      instructions: [
        'Build, lint, or test errors found.',
        '',
        'ERRORS:',
        String(details),
        '',
        'ACTION: Fix the errors above, then re-run /complete-task.',
      ].join('\n'),
    }
  }

  if (type === 'fix_review') {
    if (isFailedReviewerArray(details)) {
      const reports = details.map((f) => `- ${f.reportPath}: ${f.summary}`).join('\n')
      return {
        nextAction: 'fix_review',
        instructions: [
          'Code review found issues that must be addressed.',
          '',
          'REVIEW REPORTS:',
          reports,
          '',
          'ACTION: Read the review reports above, fix the issues, then re-run /complete-task.',
          '',
          'DECISION FRAMEWORK:',
          '- Fix automatically if: clear/unambiguous, low risk, mechanical (typos, formatting, simple refactors)',
          '- Report to user if: ambiguous (multiple valid approaches), high risk, requires judgment, conflicts with requirements',
          '- Default: fix automatically unless a "report" condition applies',
        ].join('\n'),
        failedReviewers: details,
      }
    }
    return {
      nextAction: 'fix_review',
      instructions: [
        'Code review found issues:',
        String(details),
        '',
        'ACTION: Fix the issues and re-run /complete-task.',
      ].join('\n'),
    }
  }

  if (type === 'resolve_feedback') {
    return {
      nextAction: 'resolve_feedback',
      instructions: [
        'PR has unresolved review feedback from humans.',
        '',
        'ACTION: Address each feedback item, then re-run /complete-task.',
      ].join('\n'),
    }
  }

  return {
    nextAction: 'fix_errors',
    instructions: String(details),
  }
}

export function formatCompleteTaskResult(
  result: WorkflowResult,
  ctx: CompleteTaskContext,
): CompleteTaskResult {
  if (!result.success) {
    const formatted = formatFailureInstructions(result.error)
    const failedStep = result.failedStep

    if (formatted.nextAction === 'fix_errors' && failedStep && ctx.reviewDir) {
      const logFile = `${ctx.reviewDir}/${failedStep}.log`
      writeFileSync(logFile, formatted.instructions, 'utf-8')

      return {
        success: false,
        nextAction: formatted.nextAction,
        nextInstructions: `Step "${failedStep}" failed. See ${logFile} for details.`,
        failedStep,
        logFile,
      }
    }

    return {
      success: false,
      nextAction: formatted.nextAction,
      nextInstructions: formatted.instructions,
      failedStep,
      failedReviewers: formatted.failedReviewers,
Breaking Change

The Step API changed from a function type to an object with name and execute. Confirm all steps across dev-workflow (including any not shown in this diff) were migrated; otherwise runtime failures or type mismatches may occur. Also ensure step names are stable/unique since they now propagate to failedStep.

const workflowResultSchema = z.object({
  success: z.boolean(),
  output: z.unknown().optional(),
  error: z.unknown().optional(),
  failedStep: z.string().optional(),
})
export type WorkflowResult = z.infer<typeof workflowResultSchema>

export interface Step<T extends BaseContext> {
  name: string
  execute: (ctx: T) => Promise<StepResult>
}

export function success(output?: unknown): StepResult {
  return {
    type: 'success',
    output,
  }
}

export function failure(details: unknown): StepResult {
  return {
    type: 'failure',
    details,
  }
}

export function workflow<T extends BaseContext>(steps: Step<T>[]) {
  return async (ctx: T): Promise<WorkflowResult> => {
    for (const step of steps) {
      const result = await step.execute(ctx)

      if (result.type === 'failure') {
        return {
          success: false,
          error: result.details,
          failedStep: step.name,
        }
      }

      if (result.output !== undefined) {
        ctx.output = result.output
Correctness

findPRForBranchWithState returns the first PR from pulls.list for head=owner:branch with state=all. If multiple PRs exist for the same head branch (reopened, superseded, etc.), “first” may not be deterministic. Validate ordering assumptions and that the chosen PR’s lifecycle state is the intended one for get-pr-status.

const DELETED_USER_PLACEHOLDER = '[deleted]'

type PRState = 'open' | 'closed' | 'merged'

interface PR {
  number: number
  url: string
}

interface PRWithState extends PR {state: PRState}

interface CreatePROptions {
  title: string
  body: string
  branch: string
  base?: string
}

interface FeedbackItem {
  threadId: string
  file: string | null
  line: number | null
  author: string
  body: string
}

interface CIResult {
  failed: boolean
  output: string
}

function determinePRState(mergedAt: string | null, state: string): PRState {
  if (mergedAt) {
    return 'merged'
  }
  if (state === 'open') {
    return 'open'
  }
  return 'closed'
}

const repo = simpleGit()

const GITHUB_HTTPS_URL_PATTERN = /github\.com\/([^/]+)\/([^/]+?)(?:\.git)?$/
const GITHUB_SSH_URL_PATTERN = /github\.com:([^/]+)\/([^/]+?)(?:\.git)?$/

function parseGitHubUrl(url: string): {
  owner: string
  repo: string
} {
  const httpsMatch = GITHUB_HTTPS_URL_PATTERN.exec(url)
  if (httpsMatch) {
    return {
      owner: httpsMatch[1],
      repo: httpsMatch[2],
    }
  }

  const sshMatch = GITHUB_SSH_URL_PATTERN.exec(url)
  if (sshMatch) {
    return {
      owner: sshMatch[1],
      repo: sshMatch[2],
    }
  }

  throw new GitHubError(`Could not parse GitHub URL: ${url}`)
}

export async function getRepoInfo(): Promise<{
  owner: string
  repo: string
}> {
  const remotes = await repo.getRemotes(true)
  const origin = remotes.find((r) => r.name === 'origin')

  if (!origin?.refs.fetch) {
    throw new GitHubError('No origin remote found. Is this a git repository with a GitHub remote?')
  }

  return parseGitHubUrl(origin.refs.fetch)
}

export const github = {
  async findPRForBranch(branch: string): Promise<number | undefined> {
    const {
      owner, repo 
    } = await getRepoInfo()

    const response = await getOctokit().pulls.list({
      owner,
      repo,
      head: `${owner}:${branch}`,
      state: 'open',
    })

    if (response.data.length === 0) {
      return undefined
    }

    return response.data[0].number
  },

  async findPRForBranchWithState(branch: string): Promise<PRWithState | undefined> {
    const {
      owner, repo 
    } = await getRepoInfo()

    const response = await getOctokit().pulls.list({
      owner,
      repo,
      head: `${owner}:${branch}`,
      state: 'all',
    })

    if (response.data.length === 0) {
      return undefined
    }

    const pr = response.data[0]
    const prState = determinePRState(pr.merged_at, pr.state)

    return {
      number: pr.number,
      url: pr.html_url,
      state: prState,
    }
  },

Comment thread tools/dev-workflow/complete-task/steps/verify-build.ts
Comment thread tools/dev-workflow/complete-task/format-complete-task-result.ts
Comment thread .claude/commands/post-merge-completion.md
Comment thread tools/dev-workflow/get-pr-status/steps/fetch-status.ts Outdated
Comment thread tools/dev-workflow/CLAUDE.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In `@tools/dev-workflow/complete-task/format-complete-task-result.ts`:
- Around line 132-143: The code builds logFile via string concat and calls
writeFileSync without error handling; replace concatenation with path.join by
importing path and set logFile = path.join(ctx.reviewDir, `${failedStep}.log`),
and wrap the writeFileSync call in a try/catch around the block handling
formatted.nextAction === 'fix_errors' (referencing formatted.nextAction,
failedStep, ctx.reviewDir, logFile, and writeFileSync) so that any FS error is
caught and the function returns a structured failure object (success: false)
that includes the error message and any partial state instead of allowing the
workflow to crash.

In `@tools/dev-workflow/complete-task/steps/submit-pr.ts`:
- Around line 9-17: The submitPR step currently re-checks prTitle, prBody, and
commitMessage even though buildWorkflowContext (in context-builder.ts) already
validates/throws WorkflowError for missing required properties; remove the
redundant guard in submitPR.execute (the if that returns failure) and rely on
the validated CompleteTaskContext values (prTitle, prBody, commitMessage)
provided by buildWorkflowContext; update any type assertions or function
signatures in submitPR.execute to use the non-null context properties directly.

In `@tools/dev-workflow/external-clients/github.ts`:
- Line 34: The PRWithState interface is defined on a single line which is
inconsistent with other multi-line interfaces in this file; change the
declaration of PRWithState (symbol: PRWithState) to the same multi-line style
used by PR and CreatePROptions by expanding it across multiple lines with the
interface keyword, property line "state: PRState", and closing brace on its own
line to match file formatting conventions.

Comment thread tools/dev-workflow/complete-task/format-complete-task-result.ts
Comment thread tools/dev-workflow/complete-task/steps/submit-pr.ts Outdated
Comment thread tools/dev-workflow/external-clients/github.ts
NTCoding and others added 2 commits January 17, 2026 15:42
Users should set GH_TOKEN in their shell config instead.

Co-Authored-By: Claude <[email protected]>
- Add validateConventionalCommit to check PR title format locally
- Remove dangerous fallback of using issue title without validation
- Make watchCI fail fast on first failed check instead of waiting for all
- Include detailed CI error output (summary, details, URL)

Co-Authored-By: Claude <[email protected]>
@NTCoding NTCoding changed the title Add get-pr-status command to dev-workflow feat: add get-pr-status command to dev-workflow Jan 17, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In `@tools/dev-workflow/complete-task/resolve-pr-details.ts`:
- Around line 17-27: The code currently assigns commitMessage = cliCommitMessage
?? prTitle which allows missing --commit-message to be satisfied by a fallback;
change this so commitMessage is taken only from cliCommitMessage (remove
fallback) and update the validation to check for cliCommitMessage explicitly;
specifically, set commitMessage = cliCommitMessage, keep prTitle/prBody
assignment as-is, and modify the if guard to throw the WorkflowError when
!prTitle || !prBody || !cliCommitMessage so that --commit-message is required
(referencing variables: cliCommitMessage, commitMessage, prTitle, prBody, and
WorkflowError).

In `@tools/dev-workflow/external-clients/github.ts`:
- Around line 25-27: Export the intended public API types and constant so
consumers can type results from findPRForBranchWithState: add exports for
PRState, PRWithState, and DELETED_USER_PLACEHOLDER (the existing symbols) from
this module. Specifically, mark the type alias PRState, the interface/type
PRWithState, and the constant DELETED_USER_PLACEHOLDER as exported so other
modules can import them when using findPRForBranchWithState.
- Around line 56-64: The function determinePRState is currently not exported but
is part of the module's public API; export it so consumers can import it (either
add the export keyword to the function declaration "export function
determinePRState(...)" or add "export { determinePRState }" to the module's
exports), ensuring the exported symbol name remains determinePRState and its
signature (mergedAt: string | null, state: string): PRState is unchanged.
♻️ Duplicate comments (1)
tools/dev-workflow/external-clients/github.ts (1)

34-34: Missing export and formatting inconsistency.

The interface should be exported for consumers (covered above). The single-line format was already flagged in a past review comment.

Proposed fix
-interface PRWithState extends PR {state: PRState}
+export interface PRWithState extends PR {
+  state: PRState
+}

Comment thread tools/dev-workflow/complete-task/resolve-pr-details.ts
Comment thread tools/dev-workflow/external-clients/github.ts
Comment thread tools/dev-workflow/external-clients/github.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
tools/dev-workflow/external-clients/github.ts (1)

94-106: Resolve unused export warning for getRepoInfo.

CI reports getRepoInfo as an unused export. Since it’s only used internally here, drop the export to clear the warning (or add a real external consumer if intended to be public).

🧹 Suggested fix
-export async function getRepoInfo(): Promise<{
+async function getRepoInfo(): Promise<{
   owner: string
   repo: string
 }> {
🤖 Fix all issues with AI agents
In @.claude/commands/post-merge-completion.md:
- Around line 55-63: Replace usage of the old command name get-pr-feedback with
the new get-pr-status in the post-merge flow: update the pnpm nx invocation and
any text references that say dev-workflow:get-pr-feedback to
dev-workflow:get-pr-status, and ensure the subsequent logic that parses the
returned JSON `state` field (`merged`, `open`, `closed`, `not_found`) remains
the same so the check that stops when state !== `merged` still uses the new
command output.

In `@tools/dev-workflow/get-pr-feedback/get-pr-feedback.ts`:
- Around line 9-15: The prStateSchema Zod schema is currently declared but not
exported; update the declaration of prStateSchema to export it (e.g., make it
"export const prStateSchema") so it complies with the Zod schema export rule and
remains usable by other modules and by getPRFeedbackContextSchema which
references it.

Comment thread .claude/commands/post-merge-completion.md
Comment thread tools/dev-workflow/get-pr-feedback/get-pr-feedback.ts
@sonarqubecloud

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.claude/hooks/task-completion-reminder.sh:
- Line 8: Update the user-facing text inside the "additionalContext" string:
correct the grammar by replacing "Pending checks is NOT a blocker" with "Pending
checks are NOT a blocker" so the subject-verb agreement is correct; ensure the
replacement preserves surrounding punctuation and newline formatting within the
same "additionalContext" string literal.

Comment thread .claude/hooks/task-completion-reminder.sh
@NTCoding
NTCoding merged commit 40bc9d5 into main Jan 17, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant