Secure development and change management policy
Version0.1 draft
OwnerChange Approver
ReviewYearly
Applies toApplication code, infrastructure configuration, database schemas and scheduled jobs of every in-scope product
Environments#
- Development, staging and production are separate CHG-06. Production hosts do not run development servers, experiments or interactive coding sessions.
- Production data is not copied to development or staging unless masked, or under an approved time-limited exception.
- Production configuration differs from development only through environment variables and the secrets store.
Change process#
- Every change is a pull request to the protected default branch of a repository in the in-scope GitHub organization. Direct pushes to the default branch are blocked, for administrators too CHG-01.
- Description: what changed, why, how it was tested, and the rollback plan for risky changes.
- Review by someone other than the author before merge CHG-02. The reviewer reads the diff, not just the description. A coding agent cannot be the reviewer. When a coding agent wrote the change, the human who directed it is the author.
- Automated checks pass before merge CHG-03: unit and integration tests, dependency vulnerability scan, secret scan, static analysis. A failing check is fixed, not bypassed. Bypass needs the emergency procedure.
- Security-relevant changes (authentication, authorisation, tenancy, cryptography, data flows to new vendors, logging of personal data) are flagged in the PR and reviewed with the SOC 2 gate and the compliance ship gate.
- Deploy only from the merged default branch, through the pipeline CHG-04. The pipeline records commit, actor, time and result. Editing files on a production server, copying builds by hand, or restarting a production process to pick up uncommitted code is not a deploy and is not allowed.
- Database migrations are in the PR, reviewed, and run after a fresh backup or are reversible CHG-08.
- Infrastructure changes (firewall, DNS, Cloudflare tunnel and rules, cloud resources, cron jobs) are made as code in a reviewed repository where possible. Where a console change is unavoidable, it gets a change ticket with an approval before the change CHG-07.
Emergency changes#
When production is down or data is at risk, a change may be merged or applied with whatever review is available. It is labelled emergency, committed to the repository the same day, and reviewed by a second person within 2 business days CHG-05. An emergency change that never gets its review is a control exception.
Secure coding#
- Follow the security defaults in the compliance prompt (OWASP ASVS Level 2 baseline).
- Dependencies are pinned. Automated update PRs are reviewed like any other change.
- Critical vulnerabilities in dependencies are fixed within 7 days, high within 30 OPS-03.
- Tests guard compliance-critical behaviour: tenant isolation, authorisation, redaction, consent gating.
Customer communication#
Material changes to the service or to security commitments are announced to customers before or at release COM-05.