| General Principles of Container-Based Versioning |
| The Content Encapsulation Principle (CEP) | All version-control knowledge should have a single authoritative, unambiguous representation within the system that is its "container. In all other contexts, the container should be referenced instead of duplicating or referencing its content. |
| The Container-Based Dependency Principle (CBDP) | Depend upon named containers, not upon their specific contents or context. More specifically, the contents of changes and workspaces should depend upon named configurations/codelines. |
| The Identification Insulation Principle (IDIP) | A unique name should not identify any parts of its context nor or of its related containers (parent, child or sibling) that are subject to evolutionary change. |
| The Acyclic Dependencies Principle (ADP) | The dependency graph of changes, configurations, and codelines should have no cycles. |
| Principles of Task-Based Development |
| The Single-Threaded Workspace Principle (STWP) | A private workspace should be used for one and only one development change at a time. |
| The Change Identification Principle (CHIP) | A change should clearly correspond to one, and only one, development task. |
| The Change Auditability Principle (CHAP) | A change should be made auditably visible within its resulting configuration. |
| The Change/Task Transaction Principle (CHTP) | The granule of work is the transaction of change. |
| Principles of Baseline Management |
| The Baseline Integrity Principle (BLIP) | A baseline's historical integrity must be preserved - it must always accurately correspond to what its content was at the time it was baselined. |
| The Promotion Leveling Principle (PLP) | Define fine-grained promotion-levels that are consumer/role-specific. |
| The Integration/Promotion Principle (IPP) | The scope of promotion is the unit of integration & baselining |
| Principles of Codeline Management |
|---|
| The Serial Commit Principle (SCP) | A codeline, or workspace, should receive changes (commits/updates) to a component from only one source at a time. |
| The Codeline Flow Principle (CLFP) | A codeline's flow of value must be maintained - it should be open for evolution, but closed against disruption of the progress/collaboration of its users. |
| The Codeline Integrity Principle (CLIP) | Newly committed versions of a codeline should consistently be no less correct or complete than the previous version of the codeline. |
| The Collaboration/Flow Integration Principle (CFLIP) | The throughput of collaboration is the cumulative flow of integrated changes. |
| The Incremental Integration Principle (IIP) | Define frequent integration milestones that are client-valued. |
| Principles of Branching & Merging |
|---|
| The Codeline Nesting Principle (CLNP) | Child codelines should merge and converge back to (and be shorter-lived than) their base/parent codeline. |
| The Progressive-Synchronization Principle (PSP) | Synchronizing change should flow in the direction of historical progress (from past to present, or from present to future): more conservative codelines should not sync-up with more progressive codelines; more progressive codelines should sync-up with more conservative codelines. |
| The Codeline Branching Principle (CLBP) | Create child branches for value-streams that cannot "go with the flow" of the parent. |
| The Stable Promotion Principle (SPP) | Changes and configurations should be promoted in the direction of increasing stability. |
| The Stable History Principle (SHIP) | A codeline should be as stable as it is "historical": The less evolved it is (and hence more mature/conservative), the more stable it must be. |