Copy of the legacy ~/.pi/agent/docs tree rebuilt as the command-center knowledge base: concept files promoted to path identity, index listings stripped of frontmatter, all wikilinks/relative links resolved, every checkable claim verified against the live fleet (Dankserver = Ryzen 7 7700X + RTX 3090; Strix Halo is Dankclaw), unverifiable claims tagged. kb-lint exits 0.
4.1 KiB
type, title, description, tags, timestamp
| type | title | description | tags | timestamp | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| reference | SDLC and Tooling Best Practices | Current best practices for the software development life cycle - git, CI/CD, testing, review, versioning, and dev environments. |
|
2026-08-11 |
verified: 2026-08-28
SDLC and Tooling Best Practices
This page distills current (2025/2026) best practices for running a software project. Use it when you bootstrap a new repository or when you review an existing one.
Git Branching
Trunk-based development dominates. Teams use short-lived feature branches and merge into a single shared main branch. Feature flags hide incomplete features. This replaces older models such as GitFlow for most projects.
Use GitHub Flow as the default for new projects. Create a branch for each change. Open a pull request for every change. Merge the change after review. Deploy from main at any time.
The rule main must stay deployable at all times.
Continuous Integration and Delivery
GitHub Actions is the most common CI/CD platform. Workflows live in .github/workflows/. A standard workflow follows this order: lint, test, build, deploy.
Use these patterns:
- Run one pipeline for pull request checks.
- Run a separate pipeline for
mainbranch deployments. - Use matrix builds to test multiple tool versions.
- Cache dependencies between runs.
- Split shared steps into reusable workflows.
Testing
Follow the testing pyramid. Write many unit tests. Write fewer integration tests. Write the fewest end-to-end tests.
| Layer | Speed | Focus |
|---|---|---|
| Unit | Fast | Isolated functions and modules |
| Integration | Medium | Service-to-service interaction |
| End-to-end | Slow | Complete user journeys |
Aim for roughly ten unit tests per integration test, and ten integration tests per end-to-end test.
Code Review
Reduce review friction with these tools:
- Pull request templates for consistency.
CODEOWNERSto assign reviewers by path.- Required review before merge.
- Pre-commit hooks for lint and format checks.
Semantic Versioning
Version numbers follow the MAJOR.MINOR.PATCH format.
- MAJOR changes when an API breaks compatibility.
- MINOR changes when features stay compatible.
- PATCH changes fix bugs in a compatible way.
Pre-release versions use -alpha, -beta, or -rc suffixes.
Development Environments
Use mise to manage tool versions, environment variables, and named tasks in one mise.toml file. mise replaces the separate tools asdf and direnv, and it replaces a Makefile for tasks.
Use Dev Containers for reproducible environments. The Dev Container Specification uses .devcontainer/devcontainer.json. It works with VS Code, Codespaces, and the container CLI.
Per-Ecosystem Variations
| Ecosystem | Manifest | Package manager | Test command |
|---|---|---|---|
| Node/JS | package.json |
npm, pnpm, or Bun | vitest / jest |
| Python | pyproject.toml |
uv | pytest |
| Rust | Cargo.toml |
cargo | cargo test |
| Go | go.mod |
go modules | go test ./... |
| Terraform | .tf files |
providers | terraform validate |
Put AGENTS.md instructions for each ecosystem in the Agent Instruction Files page.
Monorepos
Use a workspace tool for monorepos:
- Turborepo or Nx for JavaScript/TypeScript.
- pnpm workspaces for dependency management.
- Cargo workspaces for Rust.
- Go workspaces for Go modules.
- uv workspaces for Python.
Put a nested AGENTS.md in each package when a monorepo has multiple packages.
Citations
- Trunk-Based Development
- GitHub Flow
- GitHub Actions
- Microsoft Engineering Playbook
- semver.org
- mise
- Dev Container Specification