Branching Strategy Template (Trunk-Based, SLSA Source)
Branching standard: model selection, naming, MUST/SHOULD rules, ruleset settings, SLSA Source mapping, merging, release branches, hotfixes, exceptions, metrics
Як використовувати: Use it when you standardise how teams branch, review, merge and release across repositories. Fill the model decision and the protection rules first, then the release and hotfix flow. The main pitfall is writing rules that live only in the document instead of being enforced as platform rulesets.
Перегляд
Branching Strategy: [Repository, product or organisation name]
Standard for how code changes flow through version control: the chosen branching model and why, branch types and naming, numbered policy statements, protection rules for each protected branch, commits, pull requests and merge methods, release branches, tags and hotfixes, handling long-running work, exceptions, compliance measurement and review. Aligned with the SLSA specification v1.2 Source track (protected references, continuous history, technical controls and two-party review), the DORA capability "trunk-based development" (dora.dev), Conventional Commits 1.0.0 and Semantic Versioning 2.0.0. Replace every
[bracketed]value and every row marked Example. Worked examples use Corvid Commerce, a fictional SaaS company that runs an online checkout platform.
Document control
| Field | Value |
|---|---|
| Document ID | [BRS-001] |
| Version | [0.1] |
| Status | [Draft / In review / Approved / Superseded] |
| Owner | [@engineering-director] |
| Approvers/reviewers | [@platform-lead], [@appsec-lead], [@release-manager], [@staff-engineer] |
| Last updated | YYYY-MM-DD |
| Classification | [Internal] |
| Repositories in scope | [Example: All repositories in the corvid organisation tagged tier 1 or tier 2] |
| Chosen model | [Example: Trunk-based development with short-lived branches; release branches only for the on-premises connector] |
| Source platform | [Example: Hosted Git service with organisation rulesets] |
| Target SLSA levels | [Example: Build L3, Source L3 for tier 1 (Source L4 for payment services); Build L2, Source L3 for tier 2] |
| Next review | YYYY-MM-DD (at least annually) |
Approvals
| Role | Name | Decision | Date |
|---|---|---|---|
| Engineering director | [@name] | [Approve / Approve with conditions / Reject] | YYYY-MM-DD |
| Platform engineering lead | [@name] | [Decision] | YYYY-MM-DD |
| Application security lead | [@name] | [Decision] | YYYY-MM-DD |
| Release manager | [@name] | [Decision] | YYYY-MM-DD |
Revision history
| Version | Date | Author | Change summary |
|---|---|---|---|
| 0.1 | YYYY-MM-DD | [@name] | First draft |
| 1.0 | YYYY-MM-DD | [@name] | Example: Approved; organisation rulesets enforced on all tier 1 repositories |
| 1.1 | YYYY-MM-DD | [@name] | Example: Merge queue made mandatory on the checkout monorepo |
Contents
- Purpose and scope
- Roles and responsibilities
- Branching model selection
- Branch types and naming
- Policy statements
- Protection rules
- Commits, pull requests and merging
- Releases, tags and hotfixes
- Long-running and risky work
- Exceptions and emergency changes
- Compliance measurement
- Adoption and migration
- Review cycle and related documents
- Glossary and references
1. Purpose and scope
1.1 Purpose
This standard sets one way of integrating, reviewing and releasing code across [Organisation]. It aims to keep the default branch always releasable, to make every change reviewed and traceable, to give release engineering a predictable flow for patches, and to provide the source integrity controls that auditors and customers expect.
1.2 Scope
| In scope | Out of scope |
|---|---|
| Example: Service, library and web application repositories in tier 1 and tier 2 | Personal sandboxes and archived repositories |
| Example: Deploy configuration repositories read by the deploy controller | Generated mirrors of third-party code |
| Example: Infrastructure-as-code repositories | Data science notebooks without production use |
| [Item] | [Item] |
1.3 Applicability
All people with write access to in-scope repositories, including contractors and automation accounts, follow this standard. Automation accounts follow the same protection rules as people unless listed in the bypass register (section 10.3).
2. Roles and responsibilities
| Activity | Engineering director | Platform team | AppSec | Release manager | Repository maintainers | Contributors |
|---|---|---|---|---|---|---|
| Own and approve this standard | A | R | C | C | C | I |
| Configure organisation rulesets | I | A/R | C | I | I | I |
| Monitor rule drift and bypasses | I | R | A | I | I | I |
| Create and retire release branches | I | C | I | A/R | C | I |
| Approve exceptions | A | C | R | C | I | I |
| Follow branch, commit and pull request rules | I | I | I | I | A | R |
R = responsible, A = accountable, C = consulted, I = informed.
3. Branching model selection
3.1 Candidate models
| Model | How it works | Fits when | Costs and risks |
|---|---|---|---|
| Trunk-based development | Everyone integrates into one trunk at least daily through short-lived branches; releases are cut from trunk | Continuous deployment of one live version; strong automated tests; feature flags available | Needs fast CI and discipline on small changes; unfinished work must be hidden by flags or abstraction |
| GitHub flow | Branch from the default branch, open a pull request, address review, merge, delete the branch; teams usually deploy after merge | Small teams, web services, open-source projects with one supported version | Same as trunk-based but without explicit limits on branch lifetime; branches can grow long |
| Trunk with release branches | Trunk-based development plus a release branch per supported minor version for stabilisation and patches | Installed software, SDKs or APIs with several supported versions | Fixes must flow trunk first, then be cherry-picked; branches multiply with support windows |
| Git flow | Long-lived develop and main, plus feature, release and hotfix branches | Infrequent, scheduled releases of versioned software with formal stabilisation | Long-lived branches, late integration, frequent merge conflicts; poorly suited to continuous delivery |
3.2 Decision criteria
| Criterion | Weight | Trunk-based | GitHub flow | Trunk with release branches | Git flow |
|---|---|---|---|---|---|
| Supports continuous deployment | 3 | 3 | 3 | 2 | 1 |
| Supports several maintained versions | 2 | 1 | 1 | 3 | 3 |
| Integration frequency and conflict risk | 3 | 3 | 2 | 3 | 1 |
| Simplicity for contributors | 2 | 3 | 3 | 2 | 1 |
| Fit with source integrity controls | 2 | 3 | 3 | 3 | 2 |
| Weighted total (Example) | 32 | 29 | 31 | 18 |
Example: Scores run from 1 (poor) to 3 (good). Trunk-based scores (3 x 3) + (2 x 1) + (3 x 3) + (2 x 3) + (2 x 3) = 9 + 2 + 9 + 6 + 6 = 32. Trunk with release branches scores 6 + 6 + 9 + 4 + 6 = 31. GitHub flow scores 9 + 2 + 6 + 6 + 6 = 29. Git flow scores 3 + 6 + 3 + 2 + 4 = 18.
3.3 Decision
Example: Corvid Commerce adopts trunk-based development with short-lived branches for all SaaS services. The on-premises payment connector, which customers install and for which two minor versions are supported, adds release branches per minor version. Git flow is not used for new repositories. Record the decision in Architecture Decision Record (dev/adr) as [ADR-021].
DORA describes trunk-based development as few active branches, branches that live for hours rather than days, merges into trunk at least daily and no code freeze or integration phase. Use these as the behaviours to measure in section 11.
4. Branch types and naming
| Type | Pattern | Created from | Merges into | Maximum lifetime | Protected |
|---|---|---|---|---|---|
| Trunk | main | n/a | n/a | Permanent | Yes |
| Short-lived work | <type>/<ticket>-<slug>, for example feat/CHK-812-split-tender | main | main | [2 working days] target, [5] maximum | No |
| Release | release/<major>.<minor>, for example release/4.2 | main at the release cut | Never merged back; fixes are cherry-picked from main | Until end of support of that minor version | Yes |
| Hotfix | hotfix/<ticket>-<slug> | main; from release/<major>.<minor> only when the code no longer exists on main | main, then cherry-picked to each affected release/* branch (BR-POL-010) | [1 working day] | No |
| Dependency update | deps/<tool>-<package> | main | main | Until merged or closed by the bot | No |
| Merge queue temporary | Created by the platform | main | main | Minutes | Platform-managed |
Allowed <type> prefixes: feat, fix, docs, refactor, test, chore, perf, ci, build, aligned with the commit types in section 7.1. Use lower-case letters, digits and hyphens only; names are at most [60] characters.
5. Policy statements
The key words MUST, MUST NOT, SHOULD and MAY are used as requirement levels in this section.
| ID | Statement | Enforced by |
|---|---|---|
| BR-POL-001 | The default branch of every in-scope repository MUST be named main and MUST be protected by the organisation ruleset in section 6. | Ruleset |
| BR-POL-002 | Changes to main and release/* MUST arrive through a pull request; direct pushes MUST be blocked for everyone except the bypass register in 10.3. | Ruleset |
| BR-POL-003 | Force pushes and deletion of protected branches MUST be blocked. | Ruleset |
| BR-POL-004 | A pull request into a protected branch MUST have at least one approval from a person other than the author and the last pusher, and MUST have code owner approval where Code Ownership Policy (dev/code-ownership-policy) assigns owners. | Ruleset |
| BR-POL-005 | Approvals MUST be dismissed when new commits change the reviewed content. | Ruleset |
| BR-POL-006 | All required status checks MUST pass on the exact commit that will be merged; repositories with more than [20] merges per day MUST use a merge queue. | Ruleset, merge queue |
| BR-POL-007 | Short-lived branches SHOULD be merged within [2 working days] and MUST NOT live longer than [5 working days] without a recorded exception. | Weekly report |
| BR-POL-008 | Contributors SHOULD integrate into main at least once per working day when actively developing. | DORA-style metric in section 11 |
| BR-POL-009 | Unfinished user-visible work MUST be hidden behind a feature flag or an abstraction rather than kept on a long-lived branch (section 9). | Review |
| BR-POL-010 | Fixes for a release branch MUST land on main first and then be cherry-picked, unless the code no longer exists on main, in which case the pull request records why. | Review, release checklist |
| BR-POL-011 | Release tags MUST follow Versioning and Release Policy (dev/versioning-release-policy), MUST be created by the release pipeline and MUST be protected against update and deletion. | Tag ruleset |
| BR-POL-012 | Commits on protected branches SHOULD be signed and verified; payment service repositories MUST require signed commits. | Ruleset |
| BR-POL-013 | Commit messages on main MUST follow Conventional Commits 1.0.0 (section 7.1). | Status check |
| BR-POL-014 | Branch history on protected branches MUST be retained for the life of the repository; rewriting it requires the safe expunging process in 10.4. | Ruleset, procedure |
| BR-POL-015 | Merged short-lived branches MUST be deleted automatically. | Repository setting |
| BR-POL-016 | Repository administrators MUST NOT disable or weaken organisation rulesets at repository level; changes go through this standard. | Organisation ruleset precedence, audit log alert |
6. Protection rules
6.1 Ruleset per reference
| Setting | main | release/* | Tags v* |
|---|---|---|---|
| Require a pull request before merging | Yes | Yes | n/a |
| Required approvals | Example: 1 (2 for payment services) | 2 | n/a |
| Require review from code owners | Yes | Yes | n/a |
| Required reviewers (team and file pattern) | Example: AppSec, database and platform teams on the paths set in Code Ownership Policy (dev/code-ownership-policy) section 5.2 | Same | n/a |
| Dismiss stale approvals when new commits are pushed | Yes | Yes | n/a |
| Require approval of the most recent reviewable push | Yes | Yes | n/a |
| Require all review conversations to be resolved | Yes | Yes | n/a |
| Require status checks to pass | Build, unit, static analysis, dependency scan, commit lint | Same plus release test suite | n/a |
| Require branch up to date or merge queue | Merge queue | Up to date | n/a |
| Require linear history | Yes (squash or rebase only) | Yes | n/a |
| Require signed commits | Example: Payment services only | Payment services only | n/a |
| Block force pushes | Yes | Yes | Yes |
| Restrict deletions | Yes | Yes | Yes |
| Restrict creation and update | n/a | Release managers only | Release pipeline identity only |
| Bypass list | Empty | Empty | Release pipeline identity |
6.2 Mapping to SLSA Source track
| SLSA Source level | Meaning (paraphrased) | How this standard meets it |
|---|---|---|
| Level 1: Version controlled | Source is kept in a modern version control system | All code in the hosted Git service |
| Level 2: History and provenance | Branch history is continuous, immutable and retained, and the source platform issues provenance for each new revision | BR-POL-003, BR-POL-014; source provenance attestations issued for every new revision of a protected branch by the platform or a source attestation tool. Do not claim Level 2 or above until this provenance exists |
| Level 3: Continuous technical controls | The platform continuously enforces the organisation's technical controls on named protected references | Organisation rulesets on main, release/* and tags; BR-POL-016 |
| Level 4: Two-party review | Two trusted people review changes to protected branches | Author plus at least one independent approver (BR-POL-004, BR-POL-005); two approvers on payment services |
Example: The checkout monorepo (tier 1) meets Level 3 today because source provenance is issued and the organisation rulesets have been continuously enforced since revision [abc1234]. Payment service repositories target Level 4: they already require two approvers, and they claim Level 4 once [90 days] of continuous enforcement with an empty bypass list is evidenced. Tier 2 repositories target Level 3. Read the SLSA source requirements page for the normative wording before claiming a level.
7. Commits, pull requests and merging
7.1 Commit messages
Commits that land on main follow Conventional Commits 1.0.0: a type, an optional scope, an optional ! for a breaking change, a colon and a short imperative description. A BREAKING CHANGE: footer explains incompatible changes. With squash merging, the pull request title becomes the commit message, so the title check enforces the format.
feat(checkout)!: require idempotency key on payment capture
BREAKING CHANGE: clients must send the Idempotency-Key header on POST /captures.
Refs: CHK-812
The release pipeline derives the next version from these types according to Versioning and Release Policy (dev/versioning-release-policy): fix gives a patch, feat a minor and a breaking change a major increment under Semantic Versioning 2.0.0. Before 1.0.0, record in Versioning and Release Policy how breaking changes are numbered, because major version zero carries no stability promise.
7.2 Pull request rules
- Keep pull requests small: Example: fewer than [400] changed lines excluding generated files and lockfiles. Reviewers may ask for a split above that size.
- Fill in the pull request description using the Pull Request template (
dev/pull-request): what changed, why, how it was tested, and the linked ticket. - Open draft pull requests early for design feedback; code owners are requested when the pull request is marked ready.
- Review within the service levels in Code Ownership Policy (
dev/code-ownership-policy). - The author merges after approval and green checks, unless the repository uses an automatic merge queue.
7.3 Merge methods
| Method | Allowed on main | Allowed on release/* | Reason |
|---|---|---|---|
| Squash and merge | Yes (default) | Yes | One commit per change, readable history, clean revert |
| Rebase and merge | Yes, for stacked commits that each pass checks | Yes | Keeps meaningful commit series |
| Merge commit | No | No | Breaks the linear history required in section 6.1 |
7.4 Merge flow
The flow shows a change from branch creation to deployment when a merge queue is used.
8. Releases, tags and hotfixes
8.1 SaaS services (trunk only)
Each merge to main produces a build that the pipeline deploys. A release is the deployment of a specific digest; the pipeline tags the commit with the version computed from commit types. Hotfixes are ordinary small pull requests to main that follow the emergency path in section 10.2 when urgent. Rolling back is a revert pull request or a promotion of the previous digest, as defined in CI/CD Pipeline Design (dev/ci-cd-pipeline-design).
8.2 Installed software (trunk with release branches)
The diagram shows a fix that reaches two supported minor versions.
- The release manager creates
release/<major>.<minor>frommainat the agreed cut point and announces it. - Only fixes and release-stabilising changes enter a release branch, each through a pull request that references the original commit on
main. - The release pipeline tags
v<major>.<minor>.<patch>on the release branch; tags are never moved. - When a minor version reaches end of support, the release branch is locked (read-only) and kept for history.
- Every release follows Release Checklist (
dev/release-checklist).
8.3 Hotfix worked example
Example: A defect in tax rounding (CHK-901) affects v4.2.4 and v4.3.0 of the on-premises connector. The fix merges to main as fix(tax): round half-even per invoice line. Cherry-pick pull requests to release/4.3 and release/4.2 pass the release test suite, receive two approvals each and are tagged v4.3.1 and v4.2.5 by the release pipeline. The fix reaches all supported versions within [2 working days].
9. Long-running and risky work
| Technique | Use for | Rule |
|---|---|---|
| Feature flags | User-visible features released gradually | Flags have an owner and an expiry date per Feature Flag Policy (dev/feature-flag-policy) |
| Branch by abstraction | Replacing a component or library inside the code base | Introduce an interface, move callers in small pull requests, switch, then delete the old path |
| Dark launch | New backend path exercised without user impact | Results compared, not served, until approved |
| Expand and contract | Database or API schema changes | Add new structure, migrate, remove the old one in a later release |
| Spike branch | Throw-away experiments | Never merged; prefix spike/; deleted within [10 working days] |
When a branch must live longer than the BR-POL-007 maximum (for example a vendor-mandated framework upgrade), the owner records an exception (section 10.1) and rebases on main at least daily.
10. Exceptions and emergency changes
10.1 Exception process
- The repository maintainer requests an exception with the rule ID, scope, reason, compensating control and end date.
- AppSec reviews the risk; the engineering director approves exceptions longer than [30 days].
- The exception is recorded in the register below and reviewed at expiry. Expired exceptions are closed or renewed with a new approval.
| ID | Repository | Rule | Reason | Compensating control | Approved by | Expires |
|---|---|---|---|---|---|---|
| BR-EXC-001 (Example) | corvid/legacy-billing | BR-POL-013 | Generated commits from a code generator cannot follow the format | Pull request title check still applies | [@engineering-director] | YYYY-MM-DD |
| BR-EXC-002 (Example) | corvid/checkout | BR-POL-007 | Search module framework major upgrade needs a 3-week branch | Daily rebase, nightly CI on the branch | [@engineering-director] | YYYY-MM-DD |
| [BR-EXC-NNN] | [Repository] | [Rule] | [Reason] | [Control] | [@approver] | YYYY-MM-DD |
10.2 Emergency changes
During a declared incident the incident commander may authorise a reduced path: one approver where two are normally required (release/* and payment services), and non-security checks marked as not required for that pull request. The platform team applies the change as a time-boxed ruleset adjustment, logged in the bypass register (10.3) and reverted when the incident closes. Code owner review, at least one independent approval, security checks, signing and history rules still apply. The change is reviewed by a code owner within [one working day] after the incident and listed in the postmortem (dev/postmortem).
10.3 Bypass register
| Identity | Reference | Reason | Approved by | Reviewed |
|---|---|---|---|---|
| Release pipeline identity (Example) | Tags v* | Creates release tags | [@platform-lead] | Quarterly |
| [Identity] | [Reference] | [Reason] | [@approver] | [Cadence] |
10.4 Safe expunging
Rewriting history on a protected branch is allowed only to remove leaked secrets, personal data or content under a legal takedown. The platform lead and AppSec approve it, the secret is rotated first, the operation is logged with the before and after commit identifiers, and affected teams are told to re-clone.
11. Compliance measurement
| ID | Metric | Formula | Target (Example) | Source |
|---|---|---|---|---|
| BR-MET-001 | Ruleset coverage | In-scope repositories with the organisation ruleset active / in-scope repositories | 100% | Platform API |
| BR-MET-002 | Median branch lifetime | Median of (merge time minus first commit time) for merged pull requests | Under 1 working day | Platform API |
| BR-MET-003 | Long-lived branch count | Open branches older than the BR-POL-007 maximum without an exception | 0 | Weekly report |
| BR-MET-004 | Active branches per repository | Branches with commits in the last 7 days, excluding release branches | 3 or fewer per repository (DORA indicator); larger monorepos set a justified per-team value | Platform API |
| BR-MET-005 | Bypass events | Merges or pushes that used a bypass, per month | 0 outside the bypass register | Audit log |
| BR-MET-006 | Cherry-pick lag | Median time from fix merged on main to fix tagged on each supported release branch | Under 2 working days | Release records |
Example: In September the checkout monorepo merged 410 pull requests. The median branch lifetime was 0.6 working days, 7 branches exceeded 5 working days and 1 of them was covered by BR-EXC-002, so BR-MET-003 is 6 and the six owners were contacted. Ruleset coverage was 39 of 41 repositories (95.1%); the two gaps were new repositories created outside the template.
Report these metrics monthly to the platform team and quarterly in Delivery Performance Report (dev/delivery-performance-report). Use them to improve the system, never to rank individuals.
12. Adoption and migration
| Step | Action | Owner | Done when |
|---|---|---|---|
| 1 | Inventory repositories and their current model, protections and branch ages | Platform team | Inventory published |
| 2 | Apply the organisation ruleset in evaluate mode and report violations (evaluate mode needs an enterprise plan on some platforms; otherwise run a read-only compliance report against the API) | Platform team | Two weeks of reports |
| 3 | For each develop-based repository, merge develop into main, retarget open pull requests to main, then lock develop | Repository maintainers | develop read-only |
| 4 | Introduce feature flags for work that previously lived on long branches | Service teams | Flags registered |
| 5 | Switch the ruleset to enforce | Platform team | BR-MET-001 at 100% |
| 6 | Delete locked develop branches after [30 days] | Repository maintainers | Branch removed, tag kept for history |
13. Review cycle and related documents
Review this standard at least annually, after any change to the source platform's protection features, after a source integrity incident, and when the SLSA Source track changes. The platform team exports the live ruleset configuration at each review and compares it with section 6.
Related documents:
- Code Ownership Policy (
dev/code-ownership-policy) for code owner assignment and review service levels. - Versioning and Release Policy (
dev/versioning-release-policy) for version numbers and support windows. - CI/CD Pipeline Design (
dev/ci-cd-pipeline-design) for required checks and deployment. - Feature Flag Policy (
dev/feature-flag-policy) for hiding unfinished work. - Software Configuration Management Plan (
quality/scm-plan) for baselines and configuration control. - Contributing guide (
dev/contributing) and Governance (dev/governance) for open-source contributors and maintainers. - Software Supply Chain Security Assessment (
security/supply-chain-security) for the SLSA assessment across tracks.
14. Glossary and references
14.1 Glossary
| Term | Meaning in this standard |
|---|---|
| Trunk | The single shared branch (main) into which all changes integrate |
| Short-lived branch | Branch for one small change, merged within days |
| Release branch | Branch kept to stabilise and patch one supported minor version |
| Cherry-pick | Applying a commit from one branch onto another |
| Merge queue | Platform feature that tests each change on top of the latest queued state before merging |
| Ruleset | Platform configuration that enforces rules on branch or tag patterns |
| Bypass | Permission to act on a protected reference without meeting its rules |
| Linear history | History without merge commits on the protected branch |
| Branch by abstraction | Replacing a component through an interface in small steps on trunk |
| Safe expunging | Controlled, logged removal of content from protected history |
14.2 References
| Reference | Version or date checked | Use |
|---|---|---|
| SLSA specification, Source track requirements, slsa.dev/spec/v1.2 | v1.2, approved; checked 2026-10-24 | Source levels 1 to 4 and controls |
| DORA capabilities, Trunk-based development, dora.dev | Checked 2026-10-24 | Branch count, lifetime, daily merge and no code freeze |
| Conventional Commits, conventionalcommits.org | 1.0.0 | Commit message format |
| Semantic Versioning, semver.org | 2.0.0 | Version increments |
| GitHub Docs, Available rules for rulesets, docs.github.com | Checked 2026-10-24 | Example rule names for a hosted Git service |
| GitHub Docs, GitHub flow, docs.github.com | Checked 2026-10-24 | GitHub flow steps |
| V. Driessen, A successful Git branching model, nvie.com (2010, with a 2020 note) | Cited for the Git flow model only | Background on Git flow |
| OpenSSF Scorecard, Branch-Protection and Code-Review checks | v5.6.0 | Automated check of protections |
Standard and licence note
Based on the SLSA specification v1.2 Source track; SLSA level names and requirement concepts are used with attribution to the SLSA project (slsa.dev), published under the Community Specification License 1.0, and level meanings here are paraphrased. Trunk-based development behaviours follow the DORA capability page on dora.dev (Google LLC, CC BY 4.0). Conventional Commits 1.0.0 (CC BY 3.0) and Semantic Versioning 2.0.0 (CC BY 3.0) are cited by name and rule. Ruleset setting names reflect GitHub documentation; GitHub and GitLab are trademarks of their owners; this template is not affiliated with or endorsed by them, and the rules apply to any Git hosting platform with equivalent controls. Git flow is described from general knowledge and cited, not copied. Corvid Commerce is fictional. This template is original text written for this collection. Check the current official versions of each source before use. Template licence: MIT.
Схожі шаблони
Engineering Strategy Template (Rumelt Kernel, DORA)
Context, diagnosis with evidence and crux, guiding policies, coherent actions with owners, trade-offs and non-goals, DORA metrics, risks, review cadence
ПЗ та інженеріяArchitecture Decision Record (ADR) Template
Lightweight Nygard-style ADR: status, context, decision, consequences, alternatives, related decisions, lifecycle and log
ПЗ та інженеріяAGENTS.md Template for AI Coding Agents
Repository instructions for AI coding agents: setup, build and test commands, conventions, architecture map, PR and security rules