# KNEL-Football Secure OS - Software Development Lifecycle (SDLC) **Version:** 1.1 **Status:** Active **Last Updated:** 2026-02-19 --- ## Overview This document defines the mandatory Software Development Lifecycle (SDLC) for the KNEL-Football Secure OS project. As a **critical infrastructure project** supporting CMMC/FedRAMP/ITAR compliance, we maintain zero tolerance for security defects and require strict adherence to these processes. --- ## Core Principles ### 1. Security First - Every change must preserve or enhance security - No shortcuts, no exceptions, no "temporary" bypasses - All code is security-critical code ### 2. Test-Driven Development (TDD) - **Red → Green → Refactor** - Mandatory workflow - No code without tests - No merge without passing tests ### 3. Defense in Depth - Multiple layers of verification - Automated + manual review - Build-time + runtime validation ### 4. Documentation-Code-Test Synchronization (MANDATORY) - **All three must be in sync at ALL times** - Documentation = PRD requirements + implementation docs + JOURNAL.md (ADRs, lessons) - Code = Actual implementation in src/ and config/ - Tests = Verification that code matches documentation - **NO STUB TESTS ALLOWED** - Every test must verify actual behavior - When changing code: update tests AND documentation - When changing documentation: update code AND tests - When changing tests: verify code matches AND update documentation if needed - **JOURNAL.md is APPEND-ONLY** - Add entries for ADRs, lessons learned, session context --- ## Test-Driven Development (TDD) Workflow ### Mandatory TDD Process ``` ┌─────────────────────────────────────────────────────────────┐ │ TDD WORKFLOW │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. RED: Write a failing test │ │ ┌─────────────────────────────────────────────────┐ │ │ │ • Write test FIRST (before implementation) │ │ │ │ • Test MUST fail initially │ │ │ │ • Run: ./run.sh test: │ │ │ │ • Confirm test fails for RIGHT reason │ │ │ └─────────────────────────────────────────────────┘ │ │ ↓ │ │ 2. GREEN: Write minimal code to pass │ │ ┌─────────────────────────────────────────────────┐ │ │ │ • Write MINIMUM code to make test pass │ │ │ │ • Do not over-engineer │ │ │ │ • Run: ./run.sh test: │ │ │ │ • Confirm test passes │ │ │ └─────────────────────────────────────────────────┘ │ │ ↓ │ │ 3. REFACTOR: Improve code quality │ │ ┌─────────────────────────────────────────────────┐ │ │ │ • Clean up implementation │ │ │ │ • Remove duplication │ │ │ │ • Improve readability │ │ │ │ • Run: ./run.sh test (ALL tests must pass) │ │ │ └─────────────────────────────────────────────────┘ │ │ ↓ │ │ REPEAT AS NEEDED │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### TDD Rules 1. **Rule 1**: You MUST write a failing test before writing implementation code 2. **Rule 2**: You MUST NOT write more implementation than needed to pass the test 3. **Rule 3**: You MUST run ALL tests after refactoring ### Test Execution Commands ```bash # Run all tests ./run.sh test # Run specific test suites ./run.sh test:unit # Unit tests only ./run.sh test:integration # Integration tests only ./run.sh test:security # Security/compliance tests only # Run linting (shellcheck) ./run.sh lint ``` ### Test Coverage Requirements | Category | Minimum Coverage | Target | |----------|------------------|--------| | Security functions | 100% | 100% | | Encryption setup | 100% | 100% | | Password policy | 100% | 100% | | Firewall rules | 100% | 100% | | Build scripts | 80% | 95% | | Utility functions | 80% | 90% | --- ## Pre-Commit Checklist **Before committing ANY change, verify:** - [ ] All tests pass: `./run.sh test` - [ ] Lint passes with zero warnings: `./run.sh lint` - [ ] Security tests pass: `./run.sh test:security` - [ ] Code follows existing style - [ ] Commit message follows conventional format - [ ] No secrets, credentials, or sensitive data in commit --- ## Code Quality Standards ### Shell Script Standards 1. **Zero Shellcheck Warnings** - All shell scripts MUST pass shellcheck with zero warnings - No exceptions, no suppressions without documented justification - Run: `./run.sh lint` 2. **Strict Mode** - All scripts MUST use: `set -euo pipefail` - No uninitialized variables - No unset variable access 3. **Error Handling** - All errors must be handled explicitly - Use `|| true` only when failure is expected and acceptable - Log all errors with context 4. **Security Conventions** - Quote all variables: `"$variable"` - Use `[[ ]]` for tests (not `[ ]`) - Avoid `eval` and other code injection vectors - Never log secrets or credentials ### Documentation Standards 1. **Code Comments** - Explain WHY, not WHAT - Reference requirements (e.g., "PRD FR-006: Key-based auth only") - Document security implications 2. **Function Documentation** ```bash # Function: configure_ssh_client # Purpose: Configure SSH client for outbound connections only # Requirements: PRD FR-006 (SSH Client - No inbound services) # Security: Client-only, hardened cipher suite configure_ssh_client() { ``` --- ## Git Workflow ### Automatic Commit & Push Policy **AI agents MUST commit and push automatically as work progresses.** - **Commit early and often** - After each logical unit of work - **Atomic commits** - One commit per logical change - **Verbose messages** - Explain WHAT, WHY, and context - **Push immediately** - Changes are incomplete until pushed ### Branch Strategy ``` main (protected) │ ├── feature/ # New features ├── fix/ # Bug fixes ├── security/ # Security fixes (priority) └── docs/ # Documentation updates ``` ### Commit Message Format (MANDATORY) ``` :