The aggregate-library (aLib) project embraces reversibility as a core design principle. Every operation, decision, and contribution can be undone or revised. This document explains our reversibility philosophy and implementation.
Reversibility reduces anxiety by eliminating fear of permanent mistakes:
-
Contributors can experiment freely
-
Errors don’t cause lasting damage
-
Learning happens through safe exploration
-
Innovation emerges from low-risk experimentation
Reversibility enables better engineering:
-
Test different approaches safely
-
Roll back problematic changes instantly
-
Maintain stable production while experimenting
-
Learn from failures without consequences
Every specification change is reversible through Git:
# Revert a specific commit
git revert <commit-hash>
# Revert to previous version
git checkout <previous-commit> -- specs/arithmetic/add.md
# Create alternative branch to test approach
git checkout -b experiment/alternative-semanticsTest cases provide safety net: - Implementations verify against test cases - Breaking changes detected immediately - Safe to experiment with semantics
Deprecation period allows reversal: - Minimum 6 months for breaking changes - Community feedback can reverse decisions - Nothing is permanent until v1.0.0+
All contributions are reversible:
-
Branches: Work happens in isolated branches
-
Pull Requests: Review before merge
-
Revert: Any merged PR can be reverted
-
Alternative PRs: Multiple approaches can coexist in branches
No destructive operations: - No force pushes to main (protected branch) - No history rewriting after merge - Complete audit trail preserved
The Common Library operations are designed for reversibility:
| Operation | Reverse Operation | Notes |
|---|---|---|
|
|
Returns |
|
|
Returns |
|
|
Returns |
|
|
If |
|
N/A |
Selection, not transformation |
Immutability preferred: - Operations return new values - Original data unchanged - History preserved - Undo by referencing previous state
Governance decisions can be revisited:
-
Process: Follow GOVERNANCE.adoc amendment process
-
Timeline: No minimum wait (though stability valued)
-
Requirements:
-
Clear rationale for reversal
-
Community discussion
-
Maintainer consensus
-
-
Examples:
-
New operation added, then removed if problematic
-
Specification wording reverted to previous version
-
Policy changes reversed based on feedback
-
Even governance itself is reversible: - GOVERNANCE.adoc can be amended - Maintainers can step down and return - TPCF perimeters can be adjusted
Validation is non-destructive:
# All checks are read-only
just validate # Validates specs, doesn't modify
just test # Runs tests, doesn't change files
just docs # Checks docs, doesn't alter
just check # Full validation, zero changesAutomated checks prevent accidental damage: - Pre-commit hooks catch errors before commit - CI/CD validates before merge - No automated commits without human approval
Low-risk contribution environment:
-
Perimeter 3 (Community Sandbox): Experiment freely
-
Branches: Create as many as needed
-
Forks: Fork and experiment independently
-
Pull Requests: Reviewed before merging
-
Revert: Merged PRs can be reverted if problematic
First-time contributor safety: - Mistakes are expected and welcomed - Maintainers help fix issues - No shaming for errors - Learning encouraged through experimentation
Releases follow reversibility principles:
-
Semantic Versioning: Clearly signals compatibility
-
Deprecation: Minimum 2 releases or 12 months
-
Migration Guides: Clear path forward and backward
-
Rollback: Previous versions always available
Version 1.0.0+ stability: - Breaking changes reserved for major versions - Minor versions strictly backward compatible - Patch versions for fixes only
Documentation changes are fully reversible:
-
All in version control (Git)
-
History preserved indefinitely
-
Alternative versions in branches
-
Previous versions accessible via tags
Living documents: - Can be amended anytime - Community proposals welcomed - Regular reviews ensure relevance
When making changes, ask:
-
❏ Can this change be reverted easily?
-
❏ Is there an undo mechanism?
-
❏ Are we preserving history?
-
❏ Have we documented the reversal process?
-
❏ Are we avoiding destructive operations?
-
❏ Is this change isolated (not cascading)?
-
❏ Do tests verify reversibility where applicable?
Some things are intentionally hard to reverse:
-
Reason: Protect community
-
Examples: Bans for severe Code of Conduct violations
-
Process: Still reviewable through appeal process
-
Note: Even bans can be lifted after appropriate repair
-
Reason: Legal compliance
-
Examples: DMCA takedowns, court orders
-
Process: Follow legal procedures
-
Note: Reversible once legal issue resolved
# Always work in branches
git checkout -b feat/my-experiment
# Make changes freely
# If it doesn't work, just:
git checkout main # Discard experiment
# If it works:
# Submit PR, get review, merge
# If merged PR causes issues:
# Maintainer can revert# Review before merging
# If problematic change merged:
git revert <commit-hash>
git push origin main
# Or for multiple commits:
git revert <start-commit>..<end-commit>We track reversibility health:
| Metric | Target | Current |
|---|---|---|
Time to revert |
< 1 hour |
✅ |
% destructive operations |
0% |
✅ 0% |
% force pushes to main |
0% |
✅ 0% |
Contributor anxiety (self-reported) |
Low |
🟡 TBD |
Revert success rate |
100% |
✅ 100% |
Mistakes are learning opportunities: - Errors expected and normalized - Experimentation encouraged - Failure is data, not defeat - Reversibility enables growth
Reversibility builds trust: - Contributors trust they won’t break things permanently - Maintainers trust contributors to experiment - Community trusts governance can self-correct - Users trust specifications can improve
-
Git Documentation: https://git-scm.com/doc
-
Reversible Computing: Theoretical foundations
-
Event Sourcing: Immutable event logs
-
CRDTs: Conflict-free replicated data types (automatically reversible)