Scope: Default repository settings, security posture, and operational conventions applied across all repositories owned by NWarila.
Audience: Maintainers and contributors who need to understand why every default was chosen, not just what it is.
Every default in this governance model follows four principles:
- Secure by default. New repositories inherit the strictest reasonable posture. Relaxations are explicit, documented, and opt-in.
- Least privilege. Access, visibility, and permissions start at the minimum required. Escalation requires justification.
- Auditability. Every tracked file is explicitly allowed in a deny-all
.gitignore. Every.gitattributesrule has a comment explaining why it exists. Every governance decision is documented here. - Inheritance over duplication. Shared policy lives in this
.githubrepo once. Repositories inherit it automatically. Local overrides are permitted but discouraged unless the repo has a genuine reason to diverge.
These principles are informed by:
- OWASP Top 10
- NIST SP 800-53 (Security and Privacy Controls)
- SLSA Framework (Supply-chain Levels for Software Artifacts)
- OpenSSF Scorecard (Automated security health metrics)
Repositories default to private. Public visibility is a deliberate publication decision, not an accident. Each repository's visibility is declared explicitly and reviewed before any change.
The default branch (main) is protected across all repositories:
- Direct pushes are blocked. All changes arrive through pull requests.
- Force pushes are prohibited to preserve commit integrity and audit trails.
- Branch deletion is disabled for the default branch.
These rules enforce linear, reviewable history and prevent accidental destruction of the canonical branch.
Squash merge is the default and preferred strategy. It produces one commit per
pull request on the default branch, which keeps git log --oneline readable
and makes git bisect effective.
Merge commits and rebase merges are disabled by default to prevent noisy history from multi-commit branches.
All repositories enable the full set of GitHub security features regardless of visibility:
- Secret scanning: detects known credential patterns in repository contents.
- Push protection: blocks pushes containing detected secrets before they enter the repository. Prevention is orders of magnitude better than detection after the fact.
- AI-powered secret detection: catches non-standard credential formats that pattern-based scanning misses.
- Dependency alerts and security updates: surfaces known vulnerabilities in declared dependencies and offers automated remediation.
These features are free for all repository visibilities and have no meaningful downside.
Shared community health files are maintained in this repository and inherited by all repositories that do not define their own:
| File | Governance rationale |
|---|---|
CODE_OF_CONDUCT.md |
Establishes consistent community standards (Contributor Covenant 3.0) |
CONTRIBUTING.md |
Routes contributions through structured templates and a consistent workflow |
SECURITY.md |
Directs vulnerability reports to private channels with defined response timelines |
SUPPORT.md |
Routes questions to Discussions and prevents issue tracker noise |
Issue intake uses structured YAML forms (bug report, feature request, documentation) with required fields. Blank issues are disabled to ensure every report includes actionable context.
The pull request template requires a summary, related issue link, testing evidence, and a security-sensitive change checkbox.
Every repository runs at minimum:
- Markdown linting via
markdownlint-cli2with a shared configuration. - GitHub Actions linting via
actionlintwhere workflows exist.
Additional CI jobs (language-specific linting, testing, security scanning) are added per repository based on its content.
Dependabot is configured per repository for the relevant package ecosystems. GitHub Actions dependencies are updated weekly across all repositories to prevent drift and reduce exposure to supply-chain vulnerabilities.
All repositories follow these conventions:
- Deny-all
.gitignore: every tracked file is explicitly allowed. Nothing is tracked by accident. - Self-documenting files: every rule in
.gitignoreand.gitattributeshas a comment explaining why it exists. - LF normalization: all text files are normalized to LF via
.gitattributesfor stable diffs across platforms. - No editor config in repositories that contain no source code. Editor settings belong only in repositories where code is authored.