plugins/utils/skills/commit-and-push/SKILL.md
Create a well-formatted git commit and push to remote repository
npx skillsauth add jmagly/aiwg commit-and-pushInstall 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.
You are a Git Version Control Specialist. Create clear, well-structured commits following project conventions.
When invoked with /commit-and-push [commit-message-summary]:
git status and git diff --stat<type>(<scope>): <subject>
<body>
<footer>
feat: New featurefix: Bug fixdocs: Documentation onlystyle: Formatting, no code changerefactor: Code change that neither fixes bug nor adds featureperf: Performance improvementtest: Adding or correcting testschore: Build process or auxiliary toolsci: CI/CD configurationbuild: Build system or dependenciesrevert: Reverts a previous commitComponent or area affected. Project-specific scopes for AIWG:
agents, commands, templates, tools, docs, intake, flowscli, config, tests, api, uiBREAKING CHANGE: <description>Closes #123, Fixes #456, Refs #789DO NOT include in commit messages:
Generated with Claude Code or any AI tool nameCo-Authored-By: Claude or any AI co-authorgit status
git diff --stat # file-level summary, not full content
git diff --cached --stat # staged changes summary
git log --oneline -5 # recent commit style reference
Only read full diff for specific files when the stat is insufficient to understand the change:
git diff -- <specific-file> # targeted full diff when needed
Rule: For files you already modified in this session, the stat is sufficient. Only read full diffs for unfamiliar files or when the filename alone doesn't clarify the change.
Stage specific files by name. Exclude: .env, secrets, dist/, build/, node_modules/, *.log, IDE files.
git add path/to/file1 path/to/file2
If files are unrelated (e.g., bug fix + docs), make separate commits.
Standard:
git commit -m "type(scope): subject"
HEREDOC (for messages with body/footer):
git commit -m "$(cat <<'EOF'
type(scope): subject
Body paragraph explaining the change.
- Bullet point 1
- Bullet point 2
Closes #123
EOF
)"
DO NOT use: --no-verify, --allow-empty-message, --amend (unless explicitly correcting last commit).
Before staging or committing, consult .aiwg/aiwg.config delivery (#995) via resolveDelivery() — the resolved policy controls how this commit gets shipped:
| Field | Effect on this skill |
|-------|----------------------|
| mode: direct | Commit and push directly to default_branch — skip branch creation |
| mode: feature-branch | Create a feature branch (per branch_naming), commit, push the branch, but don't open a PR |
| mode: pr-required (default) | Feature branch + push + open PR via the resolved primary remote (#994) |
| force_push_policy: never (default) | Refuse git push --force / --force-with-lease regardless of branch |
| force_push_policy: own-branch-only | Allow force-push only on the agent's own feature branch, never default_branch |
| force_push_policy: allowed | No force-push restriction (rare; signal of an unusual workflow) |
| require_signed_commits: true | Add -S to git commit |
| branch_naming.prefix_by_type | Interpolate {issue} and {slug} to compute the new branch name when creating one |
When the project has no delivery block, resolveDelivery(undefined) returns the conservative defaults — same behavior as today. No regression for existing projects.
Default to git push (uses the branch's tracked upstream). When the project declares a remotes block in .aiwg/aiwg.config (#994), push to the resolved primary remote — not whatever was hard-coded as origin.
Resolution rule (consult .aiwg/aiwg.config):
remotes.primary is set → push to that remote name.origin.The resolveRemotes() helper in src/config/aiwg-config.ts returns the resolved remote topology with these defaults applied. Skills don't need to re-implement the rule — read it, use it.
# Default — branch tracks an upstream
git push
# Explicit primary (when not the branch's tracked upstream)
git push <resolved-primary>
When pushing tags as part of a stable release cut, also mirror the tags to every secondary[] entry whose push_on_release flag is true. Example for this repo's topology (origin = Gitea primary, github = public mirror):
git push origin --tags # primary CI / release
git push github --tags # mirror — only because push_on_release: true
Skip secondary remotes that don't have push_on_release: true. Don't push branches to mirrors — only tags on stable releases.
NEVER force push to shared branches unless explicitly required and safe.
data-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.