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. |