plugins/lisa-copilot/skills/git-submit-pr/SKILL.md
This skill should be used when pushing changes and creating or updating a pull request. It verifies the branch state, pushes to remote, creates or updates a PR with a comprehensive description, optionally coordinates the resulting Pull Request into the configured GitHub ProjectV2, and enables auto-merge.
npx skillsauth add codyswanngt/lisa git-submit-prInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Push current branch and create or update a pull request. Optional hint: $ARGUMENTS
Recognized optional hints:
work_item_ref=<ref> — source tracker item for native development linkage. Examples: CodySwannGT/lisa#614, https://github.com/CodySwannGT/lisa/issues/614, ENG-123, PROJ-456.target_branch=<branch> or base=<branch> — intended PR base branch, used to decide whether a GitHub closing keyword is safe.tracker_provider=<github|linear|jira|none> — explicit provider when the ref shape is ambiguous.pr_url=<url> — live pull request URL, only needed when updating tracker backlinks from an existing PR context.!git status !git log --oneline -10
dev, staging, or main (cannot create PR from protected branches)-u flag and the following environment variable - GIT_SSH_COMMAND="ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=5"work_item_ref can be inferred from $ARGUMENTS, the current branch name, an existing PR body, or the issue/ticket context passed by the caller.lisa:tracker-sync with the work item, milestone pr-ready, the live pr_url, and tracker_provider when known. This makes ticket -> PR linkage mandatory, not just a best-effort milestone comment.github.projects.v2 is enabled, invoke lisa:github-project-v2 with operation: ensure-item and content_node_id: <pull-request-node-id> so linked pull requests join the configured shared Project without replacing the PR as the durable review/merge surface.dev → staging): use gh pr merge --auto --merge (never squash). Squashing flattens the constituent chore(release): X.Y.Z [skip ci] commits into one commit titled with the PR title, stripping the [skip ci] markers and breaking the release workflow's promotion-detection regex — the destination branch then double-bumps its version. --merge keeps each chore(release) commit (and its [skip ci] marker) intact under a clean merge commit subject the workflow can recognize.dev): use gh pr merge --auto --merge.MERGED, CLOSED, or a required check/review gate fails and must be fixed.
gh pr merge --auto --merge fails because the repository does not allow auto-merge, keep watching the required checks and review decision. Once checks are green, the review gate is clear, and the PR is mergeable, run gh pr merge --merge directly. Never fall back to squash.gh pr view <pr> --json mergeStateStatus,statusCheckRollup,reviewDecision,mergeable,state. If mergeStateStatus == BEHIND after required checks are green, run gh pr update-branch <pr> and continue watching the new head while checks rerun.gh pr update-branch reports a conflict or cannot update the branch, surface the conflicting files, fetch the base branch locally, merge the base into the PR branch, resolve conflicts, run the relevant checks, and push. If the conflict needs broader design input, escalate through the agent-team fix-task pattern with the file list and current merge state. Do not leave a PR silently stalled in an ambiguous sync state.reviewDecision == CHANGES_REQUESTED, inspect unresolved review threads and blocking reviews. After the requested changes are addressed and threads are resolved, clear stale bot review blocks by dismissing the obsolete CHANGES_REQUESTED review where repository policy permits, or re-request review when dismissal is not allowed. A later COMMENTED review does not clear GitHub's prior CHANGES_REQUESTED state by itself.MERGED, is CLOSED, checks fail, the review gate remains blocked by unresolved human feedback, or a sync conflict cannot be resolved locally. On check failures, use the existing PR watch/fix path: inspect logs, fix, commit, push, and resume the loop.gh and git commands for this loop so Claude and Codex agents execute the same behavior from the shared skill.Add provider-appropriate linkage to the PR title and/or body without changing the status lifecycle:
work_item_ref is a GitHub issue URL, org/repo#<n>, or #<n>, add a dedicated issue reference line to the PR body.Closes #<n> only when merging this PR to the base branch represents terminal delivery for that issue. This is true when the target branch is the repository default branch or the configured production branch from .lisa.config.json deploy.branches.production.dev or staging, use a non-closing reference such as Refs #<n> so GitHub links the PR in the issue's Development / linked pull requests surface without prematurely closing the issue.Closes CodySwannGT/lisa#614 or Refs CodySwannGT/lisa#614.lisa:implement.Linear: ENG-123, so Linear's GitHub integration can attach the PR.lisa:implement.JIRA: PROJ-456, so the GitHub-JIRA integration can attach the PR.When updating an existing PR, preserve any existing linkage line unless the new work_item_ref is more specific. Do not duplicate equivalent references.
After creating or updating the PR, always make the reverse link durable on the source work item when work_item_ref is available:
gh pr view <pr-number> --json url --jq .url.lisa:tracker-sync with the original work item ref, milestone pr-ready, pr_url=<url>, and tracker_provider=<provider> when known.[lisa-pr-link] comment on the work item containing the PR URL. The fallback comment is not optional; it is the ticket-side half of the two-way link.lisa:tracker-sync again with milestone pr-merged, the same pr_url, and the merge SHA when available, so the managed backlink reflects the final state.Do not report PR submission as fully synced while the PR body references the ticket but the ticket has neither a verified native PR link nor the managed backlink comment.
After PR creation or update, resolve the live Pull Request node id:
gh pr view <pr-number> --json id,url --jq '{ id, url }'
When github.projects.v2 is enabled, delegate membership to lisa:github-project-v2:
operation: ensure-item
content_node_id: <pull-request-node-id>
Branch on the shared utility outcome exactly as GitHub Issue writers do:
outcome: disabled — no Project configured; continue normally.outcome: added or outcome: reused — PR membership is now present; continue normally.outcome: warning with required: false — preserve the exact Project error, keep the underlying PR creation/update as the durable success, and continue the normal auto-merge/watch flow.outcome: blocked with required: true — surface the exact Project failure and treat the submit flow as blocked even if the PR already exists, so operators can fix Project access/config before reporting full success.Never inline separate gh api graphql ProjectV2 mutations here. All Pull Request membership coordination goes through lisa:github-project-v2 so linked-PR flows and Issue writers stay in parity.
Include in the PR description:
--force push without explicit user requestExecute the workflow now.
documentation
Onboard a user to the project via its LLM Wiki. Interviews the user about themselves in relation to the project, captures that to project-scoped memory only, then gives a guided tour of what the project is and sample questions they can ask. Use when someone is new to the project or asks to be onboarded. Read-mostly — it does not open PRs or write PII into the wiki.
documentation
Migrate an existing, hand-rolled wiki implementation onto the lisa-wiki kernel — phased and compatibility-first, with a strict no-loss guarantee. Use when adopting lisa-wiki in a repo that already has its own wiki/, ingest skills, docs, or roles. Renaming things into the canonical shape is fine; losing functionality or data is not. Ends by running /doctor.
development
Health-check the LLM Wiki. Reports orphan pages, contradictions, stale claims, broken internal links, missing index/log coverage, structure-manifest violations, and secret/tenant leaks. Use periodically or before hardening a wiki. Read-only — it reports findings, it does not fix them.
testing
Ingest source material into the LLM Wiki. With an argument (URL, file path, or prompt) it ingests that one source; with no argument it runs a full ingest across every enabled non-external-write source. Routes to the right connector, then runs the ordered pipeline (source note → synthesis → index → log → verify → state → commit/PR). Use whenever new knowledge should enter the wiki.