engram-branch-pr

SkillDev tools

Lets your agent create pull requests that follow a project's issue-first rules, branch naming, and PR template.

Then ask your AI: use the engram-branch-pr skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.

About this skill

PR creation workflow for Engram following the issue-first enforcement system. Trigger: When creating a pull request, opening a PR, or preparing changes for review.

What this skill tells your AI

The instructions your AI receives, as published by gentleman-programming/engram in skills/branch-pr/SKILL.md and read by Ahel’s review.

When to Use

Use this skill when:

  • Creating a pull request for any change
  • Preparing a branch for submission
  • Helping a contributor open a PR

Critical Rules

  1. Every PR MUST link an approved issue — no exceptions
  2. Every PR MUST have exactly one type:* label
  3. All required automated checks must pass before merge is possible
  4. Blank PRs without issue linkage will be blocked by GitHub Actions

Workflow

1. Verify issue has `status:approved` label
2. Create branch: feat/*, fix/*, docs/*, refactor/*, chore/*
3. Implement changes
4. For behavior changes, run a focused regression test and affected package tests locally; record commands and outcomes. For docs-only changes, record N/A for Go tests and verify the documentation.
5. Check every changed path against the [Transient Artifact Policy](../../CONTRIBUTING.md#transient-artifact-policy)
6. Open PR using the template
7. Add exactly one type:* label
8. After pushing/opening the PR, wait for GitHub CI's full unit/E2E/lint and applicable platform checks; report results only after they run

Branch Naming (enforced by GitHub ruleset)

Branch names are validated by a GitHub ruleset. Pushes that don't match will be rejected.

Pattern: ^(feat|fix|chore|docs|style|refactor|perf|test|build|ci|revert)\/[a-z0-9._-]+$

TypeBranch patternExample
Featurefeat/<description>feat/json-export-command
Bug fixfix/<description>fix/duplicate-observation-insert
Chorechore/<description>chore/bump-bubbletea-v0.26
Docsdocs/<description>docs/api-reference-update
Stylestyle/<description>style/fix-tui-alignment
Refactorrefactor/<description>refactor/extract-query-sanitizer
Performanceperf/<description>perf/optimize-fts5-queries
Testtest/<description>test/add-sync-coverage
Buildbuild/<description>build/update-go-toolchain
CIci/<description>ci/split-e2e-job
Revertrevert/<description>revert/broken-migration

Rules:

  • Description MUST be lowercase
  • Only a-z, 0-9, ., _, - allowed in description
  • No uppercase, no spaces, no special characters

PR Body Format

The PR template is at .github/PULL_REQUEST_TEMPLATE.md. Every PR body MUST contain:

1. Linked Issue (REQUIRED)

Closes #<issue-number>

Valid keywords: Closes #N, Fixes #N, Resolves #N (case insensitive). The linked issue MUST have the status:approved label.

2. PR Type (REQUIRED)

Check exactly ONE in the template and add the matching label:

CheckboxLabel to add
Bug fixtype:bug
New featuretype:feature
Documentation onlytype:docs
Code refactoringtype:refactor
Maintenance/toolingtype:chore
Breaking changetype:breaking-change

3. Summary

1-3 bullet points of what the PR does.

4. Changes Table

| File | Change |
|------|--------|
| `path/to/file` | What changed |

5. Test Plan

- [ ] Focused regression (behavior change): `<actual command>` — `<actual outcome or N/A: documentation-only>`
- [ ] Affected package (behavior change): `<actual command>` — `<actual outcome or N/A: documentation-only>`
- [ ] GitHub CI full unit/E2E/lint and applicable platform checks — pending until they run

Replace example commands and outcomes with actual evidence. For docs-only changes, record N/A — documentation-only; no Go behavior changed for local Go tests and list the documentation checks actually run. Targeted coverage can help find missed branches; no total module coverage or per-PR numeric gate applies. Without a PR (or before pushing), and for high-risk changes, run additional applicable local checks and identify any missing CI evidence.

6. Contributor Checklist

All boxes must be checked:

  • Linked an approved issue
  • Added exactly one type:* label
  • Recorded actual focused regression and affected package test commands/outcomes for behavior changes, or N/A for docs-only changes
  • Ran additional applicable local checks without a PR or for high-risk changes; identified missing CI evidence
  • Docs updated if behavior changed
  • Conventional commit format
  • No Co-Authored-By trailers
  • Every changed path complies with the Transient Artifact Policy

Automated Checks

The six required contexts are listed in CONTRIBUTING.md; all six must pass before merge. Lint, transient-artifact checks, Windows Setup Test, and Cloud Sync Wrapper Tests (Windows) run for PRs but not merge groups, and are not among the six required contexts. Report their actual outcomes without treating pending checks as passed.

CheckJob nameWhat it verifies
PR ValidationCheck Issue ReferenceBody contains Closes/Fixes/Resolves #N
PR ValidationCheck Issue Has status:approvedLinked issue has status:approved
PR Label PolicyCheck PR Has type:* LabelPR has exactly one type:* label
Transient Artifact CheckCheck PR Has No Transient ArtifactsPR files comply with the Transient Artifact Policy
CIUnit Testsgo test ./... passes
CIE2E Testsgo test -tags e2e ./internal/server/... passes
CIPlugin Testsnpm test passes in plugin/pi
CILintgolangci-lint reports no new findings in Go changes
CIWindows Setup TestWindows setup preserves absolute paths and MCP job-object parent-lifetime tests pass
CICloud Sync Wrapper Tests (Windows)Cloud sync wrapper and missing-PowerShell-Engram tests pass on Windows

Conventional Commits (enforced by GitHub ruleset)

Commit messages are validated by a GitHub ruleset. Commits that don't match will be rejected.

Pattern: ^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-z0-9\._-]+\))?!?: .+

Format:

<type>(<optional-scope>): <description>
<type>(<optional-scope>)!: <description>   ← breaking change

Allowed types

TypePurposePR label
featNew featuretype:feature
fixBug fixtype:bug
docsDocumentation onlytype:docs
refactorCode refactoringtype:refactor
choreMaintenance, depstype:chore
styleFormatting, whitespacetype:chore
perfPerformance improvementtype:refactor
testAdding/fixing teststype:chore
buildBuild system changestype:chore
ciCI/CD changestype:chore
revertRevert previous commit(match original type)
feat! / fix!Breaking changetype:breaking-change

Rules

  • Type MUST be one of the listed values
  • Scope is optional, lowercase, allows a-z, 0-9, ., _, -
  • ! before : marks a breaking change
  • Description MUST start after : (colon + space)

Examples

feat(cli): add --json flag to session list command
fix(store): prevent duplicate observation insert on retry
docs(contributing): update workflow documentation
refactor(internal): extract search query sanitizer
chore(deps): bump github.com/charmbracelet/bubbletea to v0.26
style(tui): fix alignment in session detail view
perf(store): optimize FTS5 query for large datasets
test(sync): add coverage for conflict resolution
ci(workflows): split e2e into separate job
fix!: change session ID format

Invalid examples (will be rejected)

Fix bug                          ← no type prefix
feat: Add login                  ← description should be lowercase
FEAT(cli): add flag              ← type must be lowercase
feat (cli): add flag             ← no space before scope
feat(CLI): add flag              ← scope must be lowercase
update docs                      ← no conventional commit format

Commands

# Create branch
git checkout -b feat/my-feature main

# For behavior changes, run actual focused regression and affected package commands:
# go test ./internal/store -run '<actual regression test name>'
# go test ./internal/store
# Record actual commands and outcomes in the PR test plan.
# For docs-only changes, record N/A for Go tests and the documentation checks run.
# Without a PR or for high-risk changes, run additional applicable local checks.
# After pushing, GitHub CI runs broad unit/E2E/lint and applicable platform checks;
# do not claim their results until the checks actually pass.

# Push and create PR
git push -u origin feat/my-feature
gh pr create --title "feat(scope): description" --body "Closes #N"

# Add type label to PR
gh pr edit <pr-number> --add-label "type:feature"

Signals

GitHub stars
7k
Forks
733
Last commit
Oct 2026
Advanced
Item type
skill
Key
engram-branch-pr
Source
github.com/gentleman-programming/engram