Document Number: SCM-PYTHON-SLAM-001 Version: 1.0 Date: October 2, 2025 Classification: Unclassified Prepared by: Python-SLAM Configuration Team Approved by: [Configuration Manager]
| Version | Date | Author | Description of Changes |
|---|---|---|---|
| 1.0 | 2025-10-02 | Configuration Team | Initial SCM plan |
This Software Configuration Management (SCM) plan establishes the procedures, tools, and responsibilities for managing all configuration items throughout the Python-SLAM system lifecycle. The plan ensures controlled development, systematic change management, and complete traceability of all software artifacts.
Configuration Items Under Management:
- Source code (Python, C++, CUDA, shader code)
- Documentation (requirements, design, test plans, user guides)
- Build scripts and configuration files
- Test suites and test data
- Release packages and installation scripts
- Third-party dependencies and licenses
| Objective | Success Criteria | Measurement |
|---|---|---|
| Version Control | 100% of artifacts under version control | Git repository completeness |
| Change Traceability | All changes linked to requirements/issues | Git commit traceability |
| Release Management | Reproducible builds and deployments | Release automation success |
| Branch Management | Clear branching strategy implementation | Branch policy compliance |
| Backup and Recovery | Zero data loss, <1 hour recovery time | Backup validation tests |
Primary Responsibilities:
- Establish and maintain SCM policies and procedures
- Oversee configuration item identification and control
- Manage release planning and execution
- Coordinate change control board activities
- Ensure SCM tool maintenance and access control
Authority Level: Approve SCM policy changes, release candidates
Primary Responsibilities:
- Implement branching and merging strategies
- Review and approve code changes
- Ensure coding standards compliance
- Coordinate technical change implementation
- Manage development branch policies
Authority Level: Approve technical changes, merge to main branches
Primary Responsibilities:
- Validate configuration item integrity
- Verify change implementation against requirements
- Conduct configuration audits
- Ensure test artifact management
- Validate release candidate quality
Authority Level: Approve/reject releases based on quality criteria
Primary Responsibilities:
- Plan and execute release schedules
- Coordinate release candidate preparation
- Manage release artifact packaging
- Execute deployment procedures
- Maintain release documentation
Authority Level: Execute approved releases, emergency patches
Membership:
- Configuration Manager (Chair)
- Lead Developer
- Quality Assurance Lead
- Product Owner/Requirements Lead
- Technical Architect
Meeting Schedule: Weekly during active development, bi-weekly during maintenance
Decision Authority: Changes affecting multiple components, architectural modifications, schedule impacts
| Category | File Types | Naming Convention | Version Control |
|---|---|---|---|
| Core SLAM Code | *.py in src/python_slam/ |
Module-based hierarchy | Git with tags |
| GPU Kernels | *.cu, *.cl, *.metal |
Platform-specific directories | Git with LFS |
| Build Scripts | setup.py, CMakeLists.txt |
Root and module level | Git standard |
| Configuration | *.json, *.yaml, *.toml |
Environment-specific naming | Git with validation |
| Document Type | Location | Naming Convention | Review Cycle |
|---|---|---|---|
| Requirements | docs/requirements/ |
REQ-{TYPE}-{NUMBER}.md |
Major changes only |
| Design Documents | docs/design/ |
{TYPE}-{COMPONENT}-{VERSION}.md |
Architecture changes |
| Test Documentation | docs/testing/ |
{TEST-TYPE}-{VERSION}.md |
Release cycles |
| User Documentation | docs/user/ |
{COMPONENT}-guide.md |
Minor releases |
| Artifact Type | Content | Storage Location | Retention Policy |
|---|---|---|---|
| Source Releases | Tagged source code | GitHub Releases | Permanent |
| Binary Packages | Compiled packages | PyPI, GitHub | 2 years for dev versions |
| Container Images | Docker containers | Container Registry | 1 year for non-LTS |
| Documentation | Generated docs | GitHub Pages | Permanent for releases |
Semantic Versioning (SemVer) Format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
Version Components:
- MAJOR: Incompatible API changes, architectural modifications
- MINOR: Backward-compatible functionality additions
- PATCH: Backward-compatible bug fixes
- PRERELEASE: Alpha, beta, rc (release candidate) identifiers
- BUILD: Build metadata (commit hash, build date)
Examples:
1.0.0- First major release1.1.0- Minor feature addition1.1.1- Bug fix release2.0.0-beta.1- Second major version beta1.2.0+20251002.abc123- Release with build metadata
Tag Types:
- Release Tags:
v{MAJOR}.{MINOR}.{PATCH}(e.g.,v1.0.0) - Pre-release Tags:
v{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}(e.g.,v1.1.0-beta.1) - Milestone Tags:
milestone-{NAME}(e.g.,milestone-performance-baseline)
Tag Creation Process:
- Complete testing and validation
- Update version numbers in all relevant files
- Create annotated tag with release notes
- Push tag to trigger automated release process
python-slam/
├── .github/ # GitHub workflows and templates
│ ├── workflows/ # CI/CD pipeline definitions
│ └── ISSUE_TEMPLATE/ # Issue and PR templates
├── src/ # Source code
│ └── python_slam/ # Main package
├── tests/ # Test suites
├── docs/ # Documentation
├── scripts/ # Build and utility scripts
├── data/ # Sample data and datasets
├── docker/ # Container definitions
├── requirements/ # Dependency specifications
└── examples/ # Usage examples and tutorials
gitgraph
commit id: "Initial"
branch develop
checkout develop
commit id: "Dev Setup"
branch feature/gpu-acceleration
checkout feature/gpu-acceleration
commit id: "GPU Detection"
commit id: "CUDA Support"
checkout develop
merge feature/gpu-acceleration
branch release/1.0.0
checkout release/1.0.0
commit id: "Release Prep"
commit id: "Bug Fixes"
checkout main
merge release/1.0.0
commit id: "v1.0.0" tag: "v1.0.0"
checkout develop
merge release/1.0.0
Main Branch (main):
- Purpose: Production-ready code only
- Protection: Requires PR approval, passing CI/CD
- Merge Policy: Squash and merge from release branches
- Direct Commits: Prohibited (emergency hotfixes only)
Development Branch (develop):
- Purpose: Integration of completed features
- Protection: Requires PR approval, passing tests
- Merge Policy: Merge commits to preserve feature history
- Quality Gate: All tests pass, code review completed
Feature Branches (feature/{feature-name}):
- Purpose: Individual feature development
- Lifetime: Creation to feature completion
- Merge Target:
developbranch - Naming: Descriptive, kebab-case (e.g.,
feature/ros2-integration)
Release Branches (release/{version}):
- Purpose: Release preparation and stabilization
- Created From:
developbranch when feature-complete - Merge Target: Both
mainanddevelop - Changes Allowed: Bug fixes, documentation updates only
Hotfix Branches (hotfix/{issue}):
- Purpose: Critical production bug fixes
- Created From:
mainbranch - Merge Target: Both
mainanddevelop - Lifecycle: Immediate (hours to days)
Conventional Commits Standard:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Commit Types:
- feat: New feature implementation
- fix: Bug fix
- docs: Documentation changes
- style: Code style changes (formatting, no logic changes)
- refactor: Code refactoring without feature/bug changes
- test: Test additions or modifications
- chore: Build process, auxiliary tool changes
Examples:
feat(gpu): add CUDA acceleration for feature extraction
Implement CUDA kernels for parallel feature detection and description.
Achieves 3.5x speedup on RTX 4070 compared to CPU implementation.
Closes #123
fix(slam): resolve tracking loss in low-light conditions
Improve feature detection threshold adaptation and add predictive
tracking when feature count drops below minimum threshold.
Fixes #456
Review Criteria:
- Code follows established style guidelines
- Adequate test coverage for new functionality
- Documentation updated for public APIs
- Performance impact assessed for critical paths
- Security implications reviewed
Review Process:
- Developer creates pull request with description and tests
- Automated CI/CD pipeline executes (build, test, analysis)
- Peer review by at least one other developer
- Lead developer approval for architectural changes
- Merge to target branch after all approvals
Development Builds:
- Trigger: Every commit to feature/develop branches
- Purpose: Early integration testing and feedback
- Artifacts: Wheel packages, test reports, coverage analysis
- Retention: 30 days for develop, 7 days for features
Release Candidate Builds:
- Trigger: Release branch creation or updates
- Purpose: Pre-release validation and testing
- Artifacts: Full distribution packages, documentation
- Retention: Until next release or 6 months
Production Releases:
- Trigger: Tag creation on main branch
- Purpose: Official software distribution
- Artifacts: Signed packages, containers, documentation
- Retention: Permanent for major/minor, 2 years for patches
# GitHub Actions Build Pipeline
name: Build and Test Pipeline
on:
push:
branches: [main, develop, 'feature/*', 'release/*']
pull_request:
branches: [main, develop]
workflow_dispatch:
env:
PYTHON_VERSION: '3.9'
jobs:
lint-and-format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install dependencies
run: |
pip install black flake8 mypy pylint
pip install -r requirements-dev.txt
- name: Code formatting check
run: black --check src/ tests/
- name: Linting
run: flake8 src/ tests/
- name: Type checking
run: mypy src/python_slam/
- name: Code quality analysis
run: pylint src/python_slam/
test-matrix:
needs: lint-and-format
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ['3.9', '3.10', '3.11']
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install system dependencies
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
sudo apt-get update
sudo apt-get install -y libgl1-mesa-glx libglib2.0-0
elif [ "$RUNNER_OS" == "macOS" ]; then
brew install cmake
fi
shell: bash
- name: Install Python dependencies
run: |
pip install --upgrade pip setuptools wheel
pip install -r requirements.txt
pip install -r requirements-test.txt
pip install -e .
- name: Run unit tests
run: |
python -m pytest tests/unit/ -v --cov=python_slam --cov-report=xml
- name: Run integration tests
run: |
python -m pytest tests/integration/ -v --maxfail=5
- name: Upload coverage
uses: codecov/codecov-action@v3
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.9'
build-packages:
needs: test-matrix
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # Full history for version calculation
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install build dependencies
run: |
pip install build twine
- name: Build distribution packages
run: |
python -m build
- name: Check package integrity
run: |
twine check dist/*
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: python-slam-packages
path: dist/
docker-build:
needs: test-matrix
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop'
steps:
- uses: actions/checkout@v3
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: |
ghcr.io/python-slam/python-slam:latest
ghcr.io/python-slam/python-slam:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=maxRelease Types:
| Release Type | Frequency | Content | Planning Horizon |
|---|---|---|---|
| Major | 12-18 months | Breaking changes, new architectures | 6 months |
| Minor | 3-4 months | New features, enhancements | 2 months |
| Patch | As needed | Bug fixes, security updates | 1 week |
| Emergency | Critical issues | Critical bug/security fixes | Immediate |
Release Milestones:
- Feature Freeze: All features completed and merged to develop
- Release Branch Creation: Stabilization period begins
- Release Candidate: First candidate for release testing
- Release Approval: CCB approves release for production
- Release Deployment: Official release published
Pre-Release Validation:
- All planned features implemented and tested
- Performance benchmarks meet targets
- Documentation updated and reviewed
- Security scan completed with no critical issues
- Multi-platform testing completed
- Backward compatibility verified
- Upgrade/migration procedures tested
Release Package Preparation:
- Version numbers updated in all files
- CHANGELOG.md updated with release notes
- License files and attributions current
- Installation scripts tested
- Example code and tutorials verified
- API documentation generated and published
Release Execution:
- Create and push release tag
- Automated build and package creation
- Package signing and validation
- Upload to distribution channels (PyPI, GitHub)
- Container image publication
- Documentation site update
- Release announcement preparation
Core Dependencies (Required for basic functionality):
# requirements/core.txt
numpy>=1.21.0,<2.0.0
opencv-python>=4.5.0,<5.0.0
PyQt6>=6.0.0,<7.0.0 # OR PySide6>=6.0.0,<7.0.0Optional Dependencies (Feature-specific):
# requirements/gpu.txt
cupy-cuda11x>=10.0.0,<12.0.0; platform_system!="Darwin"
pycuda>=2021.1; platform_system!="Darwin"
# requirements/ros2.txt
rclpy>=3.0.0,<4.0.0; platform_system=="Linux"
# requirements/embedded.txt
psutil>=5.8.0,<6.0.0Development Dependencies:
# requirements/dev.txt
pytest>=7.0.0,<8.0.0
pytest-cov>=3.0.0,<4.0.0
black>=22.0.0,<23.0.0
flake8>=4.0.0,<5.0.0
mypy>=0.950,<1.0.0Update Schedule:
- Security Updates: Immediate (within 48 hours)
- Major Version Updates: Next minor release
- Minor Version Updates: Evaluated monthly
- Patch Updates: Evaluated bi-weekly
Update Validation:
- Automated dependency scanning for vulnerabilities
- Compatibility testing with new versions
- Performance impact assessment
- Breaking change analysis
- Rollback plan preparation
Configuration Status Audits (Monthly):
- Verify all configuration items are under version control
- Check compliance with naming conventions
- Validate access controls and permissions
- Review backup and recovery procedures
Functional Configuration Audits (Per Release):
- Verify configuration item relationships and dependencies
- Validate that delivered items match approved specifications
- Check requirements traceability
- Review change implementation completeness
Physical Configuration Audits (Quarterly):
- Inventory all configuration items and their locations
- Verify physical storage and backup systems
- Check archive integrity and accessibility
- Review retention policy compliance
Automated Audit Checks:
#!/bin/bash
# Configuration Audit Script
echo "=== Python-SLAM Configuration Audit ==="
echo "Audit Date: $(date)"
echo
# Check Git repository status
echo "--- Git Repository Status ---"
git status --porcelain
if [ $? -eq 0 ] && [ -z "$(git status --porcelain)" ]; then
echo "✅ Repository is clean"
else
echo "❌ Repository has uncommitted changes"
fi
# Check for untracked files
untracked=$(git ls-files --others --exclude-standard)
if [ -z "$untracked" ]; then
echo "✅ No untracked files"
else
echo "❌ Untracked files found:"
echo "$untracked"
fi
# Check branch protection
echo -e "\n--- Branch Protection Status ---"
# This would typically use GitHub API to check protection rules
echo "Branch protection rules should be verified manually"
# Check version consistency
echo -e "\n--- Version Consistency Check ---"
version_setup=$(grep "version=" setup.py | cut -d'"' -f2)
version_init=$(grep "__version__" src/python_slam/__init__.py | cut -d'"' -f2)
version_docs=$(grep "Version:" docs/README.md | cut -d' ' -f2)
if [ "$version_setup" = "$version_init" ] && [ "$version_init" = "$version_docs" ]; then
echo "✅ Version numbers consistent: $version_setup"
else
echo "❌ Version mismatch:"
echo " setup.py: $version_setup"
echo " __init__.py: $version_init"
echo " docs: $version_docs"
fi
# Check file integrity
echo -e "\n--- File Integrity Check ---"
find . -name "*.py" -exec python -m py_compile {} \; 2>/dev/null
if [ $? -eq 0 ]; then
echo "✅ All Python files compile successfully"
else
echo "❌ Python compilation errors found"
fi
# Check dependency security
echo -e "\n--- Dependency Security Check ---"
if command -v safety &> /dev/null; then
safety check --json
else
echo "⚠️ Safety tool not installed - skipping security check"
fi
echo -e "\n=== Audit Complete ==="Change Categories:
| Category | Examples | Approval Required | Implementation Time |
|---|---|---|---|
| Trivial | Documentation typos, comment updates | Developer | Immediate |
| Minor | Bug fixes, small enhancements | Lead Developer | 1-2 days |
| Major | New features, API changes | CCB | 1-2 weeks |
| Critical | Architecture changes, breaking changes | CCB + Stakeholders | 1+ months |
Change Request Template:
# Change Request CR-YYYY-NNN
## Change Summary
**Type**: [Trivial/Minor/Major/Critical]
**Priority**: [Low/Medium/High/Emergency]
**Requested By**: [Name/Role]
**Date**: [YYYY-MM-DD]
## Change Description
[Detailed description of proposed change]
## Justification
[Business/technical rationale for change]
## Impact Analysis
- **Requirements**: [List affected requirements]
- **Components**: [List affected software components]
- **Interfaces**: [List affected interfaces]
- **Testing**: [Testing impact and requirements]
- **Documentation**: [Documentation updates needed]
- **Training**: [Training/user impact]
## Implementation Plan
1. [Step 1 description]
2. [Step 2 description]
3. [etc.]
## Risk Assessment
- **Technical Risks**: [Potential technical issues]
- **Schedule Risks**: [Timeline impacts]
- **Resource Risks**: [Resource requirements]
- **Mitigation**: [Risk mitigation strategies]
## Approval
- [ ] Technical Review (Lead Developer)
- [ ] Impact Assessment (System Architect)
- [ ] Testing Plan (QA Lead)
- [ ] Documentation Plan (Tech Writer)
- [ ] CCB Approval (if required)
**Approved By**: [Name/Date]
**Implementation Authorization**: [Name/Date]Primary Repository (GitHub):
- Location: GitHub.com hosted Git repository
- Backup Frequency: Real-time (distributed Git nature)
- Retention: Unlimited (GitHub policy)
- Access Control: Organization-level permissions
Secondary Backup (GitLab):
- Location: GitLab.com mirror repository
- Sync Frequency: Daily automated sync
- Purpose: Disaster recovery, service outage protection
- Maintenance: Automated mirror updates
Local Development Backups:
- Individual Developer Clones: Full repository history
- CI/CD Runner Caches: Recent builds and artifacts
- Development Server: Shared development environment
Release Artifacts:
- PyPI Packages: Permanent retention on PyPI
- GitHub Releases: Automated backup with release tags
- Container Images: Multi-registry storage (GitHub, Docker Hub)
- Documentation: GitHub Pages with archive snapshots
Build Artifacts:
- CI/CD Artifacts: 30-day retention in GitHub Actions
- Test Results: 90-day retention with trend analysis
- Performance Benchmarks: 1-year retention for historical analysis
Complete Repository Loss Scenario:
-
Immediate Response (0-1 hour):
- Assess scope of data loss
- Notify development team
- Activate incident response team
-
Recovery Initiation (1-4 hours):
- Restore from GitLab mirror or developer clones
- Verify repository integrity and completeness
- Re-establish GitHub repository if needed
-
Service Restoration (4-8 hours):
- Update remote references for all developers
- Restore CI/CD pipeline configurations
- Verify all branch protections and access controls
-
Validation and Communication (8-24 hours):
- Complete data integrity verification
- Resume normal development operations
- Conduct post-incident review and improvements
CI/CD Pipeline Failure:
-
Detection and Assessment:
- Automated monitoring alerts
- Impact assessment (affected branches/PRs)
- Fallback to manual build processes if needed
-
Recovery Actions:
- Restore pipeline configurations from version control
- Re-run failed builds after issue resolution
- Validate restored functionality
Artifact Recovery:
- Package Repository Issues:
- Re-build and re-publish packages from source
- Verify package integrity and signatures
- Update distribution channels
Primary Tools:
- Git: Distributed version control system
- GitHub: Repository hosting, collaboration, CI/CD
- GitHub Actions: Automated build and deployment pipelines
- GitLab: Secondary mirror and backup repository
Tool Configurations:
# .github/workflows/config-audit.yml
name: Configuration Audit
on:
schedule:
- cron: '0 2 * * 1' # Weekly on Monday at 2 AM
workflow_dispatch:
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Run Configuration Audit
run: ./scripts/config-audit.sh
- name: Upload Audit Report
uses: actions/upload-artifact@v3
with:
name: config-audit-report
path: audit-report.txtBuild System:
- Python setuptools/wheel: Package building
- GitHub Actions: Automated CI/CD pipelines
- Docker: Containerization and deployment
- Twine: PyPI package publishing
Release Management:
- GitHub Releases: Release notes and artifact distribution
- PyPI: Python package distribution
- Container Registries: Docker image distribution
- GitHub Pages: Documentation hosting
Access Levels:
| Role | Repository Access | Branch Protections | Administrative |
|---|---|---|---|
| Maintainer | Admin | Bypass protections | Full access |
| Developer | Write | Cannot force push to protected | Limited admin |
| Contributor | Read | PR required for all changes | No admin access |
| Guest | Read (public only) | No write access | No access |
Security Policies:
- Two-factor authentication required for all members
- Branch protection rules enforce code review
- Secrets management for CI/CD credentials
- Regular access review and cleanup
CI/CD Security:
- Signed commits required for releases
- Secure secret storage in GitHub Secrets
- Dependency scanning and vulnerability alerts
- Container image security scanning
Release Security:
- Package signing for PyPI releases
- Container image signing with Cosign
- Security scanning before release approval
- Vulnerability disclosure process
| Metric | Target | Measurement | Frequency |
|---|---|---|---|
| Commit Frequency | 5-10 commits/day | Git log analysis | Daily |
| Code Review Coverage | 100% for protected branches | PR statistics | Weekly |
| Build Success Rate | >95% | CI/CD pipeline analytics | Daily |
| Test Coverage | >80% | Coverage reports | Per commit |
| Security Vulnerabilities | 0 critical, <5 medium | Security scanning | Daily |
| Metric | Target | Measurement | Frequency |
|---|---|---|---|
| Code Quality Score | >8.0/10 | Static analysis tools | Per commit |
| Documentation Coverage | 100% public APIs | Documentation audit | Weekly |
| Configuration Drift | 0 instances | Environment comparison | Daily |
| Change Success Rate | >98% | Change tracking | Monthly |
Weekly Status Report:
- Development progress summary
- Build and test status
- Outstanding issues and risks
- Upcoming release milestones
- Resource utilization
Monthly Configuration Report:
- Configuration audit results
- Change management statistics
- Tool performance and availability
- Security posture assessment
- Process improvement recommendations
Development Dashboard (Real-time):
- Build status for all branches
- Test coverage trends
- Code quality metrics
- Open pull requests and reviews
- Deployment status
Release Dashboard:
- Release pipeline status
- Release candidate quality metrics
- Deployment environments status
- Performance benchmark trends
- User adoption metrics
Document End
This Software Configuration Management Plan is maintained as part of the Python-SLAM configuration management system. All SCM procedures and policies must be followed by all team members and regularly reviewed for effectiveness.