Commit and Push
Land the pending work as one verified, cleanly described commit. Invoke at milestones - one commit = one shippable-for-testing unit.
Steps
git branch --show-current- on a protected branch (default/integration), STOP; work happens on feature branches.- Run the gates: typecheck + lint always, tests scoped to the change (
dev-run-tests). Failure - fix or report, never bypass. - Review the diff:
git status --porcelain+git diff. Drop debug leftovers and accidental files. Stage selectively withgit add <paths>- never blanketgit add -A(it sweeps secrets and parallel-session work). Then rungit-scan-secrets(diffscope): a live credential in what you are about to commit stops the commit until the value moves to the environment or secret store; one found elsewhere in the pending diff is reported, not swallowed, and does not block this commit. - One logical change per commit; unrelated edits split into separate commits. In spec-driven projects, tick the plan's
## Work stepsboxes in the same commit as the code that earns them. - Message: one line, capital first letter, past tense, work-item id when the project uses them (
Added export endpoint (FR-042)). An explicit argument overrides. git commit, thengit push(-u origin <branch>on first push). Remote moved - integrate per profileupdate_strategy, re-run gates, push again. Never force-push.
Verify
git log --oneline -1shows the message;git statusreports up to date with origin; gates were green on the pushed tree.
Scope / hand-off
- Opening the PR -
git-open-pr; the CI / verify / review rounds -git-finalize-pr; the outcome -git-complete-pr(orspec-executePhase E in spec projects).
Constraints
- Never weaken a gate to commit (
dev-verification-gates); never--no-verify.