Stacks
Stacks are one of Atomic's most powerful features, enabling parallel development lines that can be managed independently and merged without traditional branch headaches. Unlike Git branches, stacks are first-class citizens in Atomic's data model.
What are Stacks?β
A stack represents a named sequence of changes that evolves independently. Think of stacks as parallel timelines of development that can diverge and converge while maintaining mathematical consistency.
Key Characteristicsβ
- Independent Evolution: Each stack maintains its own sequence of changes
- Selective Merging: Pull specific changes between stacks without complex rebasing
- Conflict-Free by Design: Atomic's patch theory handles most conflicts automatically
- Named and Discoverable: Stacks have human-readable names and can be listed/queried
- Remote-Ready: Stacks can be pushed to and pulled from remote repositories
- Cascade Propagation (Coming Soon): Push changes from parent to all child stacks automatically - impossible in Git!
β οΈ Critical Difference: Stacks are NOT Git Branchesβ
Stacks share the same working copy - they are NOT isolated filesystems like Git branches.
The Key Insightβ
When you switch between stacks:
- β Recorded changes are applied/unapplied (patch history is isolated)
- β Unrecorded changes remain in your working copy (files persist)
- β Untracked files do NOT disappear (unlike
git checkout)
Concrete Exampleβ
# Start on main stack
atomic stack switch main
ls
# Output: test.txt
# Create new stack and switch to it
atomic stack new new-feature
atomic stack switch new-feature
ls
# Output: test.txt (same files)
# Create and record a new file
vi new-file.txt
atomic record new-file.txt -m "Add new feature"
# Switch back to main
atomic stack switch main
ls
# Output: new-file.txt test.txt
# ^^^^^^^^^^^^
# Still here! It's untracked from main's perspective
Why does new-file.txt still exist on main?
- The change is recorded on the new-feature stack (in patch history)
- But it's an untracked file from main's perspective (not recorded on main)
- Atomic doesn't delete untracked files when switching stacks
- To verify isolation, check the logs:
# On main stack
atomic log
# Does NOT show "Add new feature" change
# On new-feature stack
atomic stack switch new-feature
atomic log
# DOES show "Add new feature" change
What IS Isolated?β
Patch/change history is isolated between stacks:
atomic stack switch main
atomic log # Shows main's changes only
atomic stack switch new-feature
atomic log # Shows new-feature's changes only
To Get Git-Like File Isolationβ
If you want files to disappear when switching stacks, manually clean up:
atomic stack switch main
rm new-file.txt # Manual cleanup of untracked files
# Or unrecord it on main if you want to track its absence
atomic unrecord new-file.txt
Mental Modelβ
Git Branches:
branch-a β separate working directory state
branch-b β separate working directory state
Atomic Stacks:
stack-a β separate patch history } β shared working copy
stack-b β separate patch history }
Think of stacks as different views of patch history operating on the same workspace, not as separate workspaces like Git branches.
Why Stacks Matterβ
Traditional version control systems treat branches as pointers to commits, leading to complex merge scenarios. Atomic's stacks are fundamentally different:
Git Model: Atomic Model:
βββββββββββ βββββββββββββββ
β Branch βββββββββββββββββΆβ Commit β
β (Ref) β β Graph β
βββββββββββ βββββββββββββββ
Atomic Model:
βββββββββββ βββββββββββββββ
β Stack βββββββββββββββββΆβ Changes β
β (State) β β (Patches) β
βββββββββββ βββββββββββββββ
Benefitsβ
- True Independence: Changes on one stack don't affect others until explicitly merged
- Granular Control: Cherry-pick individual changes between stacks with precision
- Mathematical Correctness: Patch theory ensures consistency across stack operations
- Simplified Workflows: No need for complex rebase or merge strategies
- Concurrent Development: Multiple teams can work on separate stacks simultaneously
Common Stack Patternsβ
Feature Developmentβ
# Create a feature stack
atomic stack new feature-auth
# Switch to the feature stack
atomic stack switch feature-auth
# Work on your feature
atomic record -m "Add authentication module"
atomic record -m "Add login endpoint"
# Switch back to main
atomic stack switch main
# Selectively apply changes
atomic apply <change-hash>
Release Stacksβ
# Create a release stack
atomic stack new release-1.0
# Apply only stable changes to release
atomic stack switch release-1.0
atomic apply <stable-change-1>
atomic apply <stable-change-2>
# Tag the release
atomic tag release-1.0 "v1.0.0"
Experimental Stacksβ
# Create an experimental stack
atomic stack new experiment-new-api
# Try out ideas without affecting main development
atomic record -m "Experimental API design"
# If it works, merge back to main
atomic stack switch main
atomic pull . experiment-new-api
# If it doesn't work, just delete the stack
atomic stack delete experiment-new-api
Team Stacksβ
# Each team maintains their own stack
atomic stack new team-frontend
atomic stack new team-backend
atomic stack new team-devops
# Teams work independently
atomic stack switch team-frontend
atomic record -m "Update UI components"
# Integration happens through selective merges
atomic stack switch main
atomic pull . team-frontend <specific-changes>
Stack Lifecycleβ
Creationβ
Stacks can be created from scratch or split from existing stacks:
# Create a new stack
atomic stack new <stack-name>
# Create a stack from a specific state
atomic stack new <stack-name> --from <change-hash>
Switchingβ
Move your working copy between stacks:
# Switch to a different stack
atomic stack switch <stack-name>
# List available stacks
atomic stack list
Mergingβ
Integrate changes between stacks:
# Pull all changes from another stack
atomic pull . <source-stack>
# Apply specific changes
atomic apply <change-hash>
# Push changes to a remote stack
atomic push <remote> <stack-name>
Deletionβ
Remove stacks that are no longer needed:
# Delete a local stack
atomic stack delete <stack-name>
# Delete a remote stack
atomic push --delete <remote> <stack-name>
Stack vs. Git Branch Comparisonβ
| Feature | Git Branches | Atomic Stacks |
|---|---|---|
| Data Model | Pointer to commit | First-class sequence of changes |
| Merging | Three-way merge with conflicts | Patch-based automatic merging |
| History | Linear or graph-based | Change-oriented with dependencies |
| Cherry-picking | Can cause duplicate commits | Mathematically consistent |
| Remote Sync | Push/pull entire branch | Selective change synchronization |
| Conflict Resolution | Manual merge required | Automatic in most cases |
Best Practicesβ
1. Naming Conventionsβ
Use clear, descriptive stack names that indicate purpose:
# Good names
atomic stack new feature-user-authentication
atomic stack new bugfix-memory-leak
atomic stack new experiment-new-parser
atomic stack new release-2.1
# Avoid generic names
atomic stack new temp
atomic stack new test
atomic stack new my-branch
2. Keep Stacks Focusedβ
Each stack should have a clear purpose:
- Feature Stacks: One feature or related group of features
- Bugfix Stacks: Specific bug fixes
- Release Stacks: Stable release preparation
- Experimental Stacks: Exploratory work
3. Regular Integrationβ
Integrate changes frequently to avoid divergence:
# Periodically sync with main
atomic stack switch feature-xyz
atomic pull . main
# Keep your feature stack up to date
atomic stack switch main
atomic pull origin main
atomic stack switch feature-xyz
atomic pull . main
4. Clean Up Old Stacksβ
Delete stacks that are no longer active:
# List all stacks
atomic stack list
# Delete merged feature stacks
atomic stack delete feature-completed-work
# Archive important stacks before deletion
atomic tag archive-feature-xyz "Archived feature work"
atomic stack delete feature-xyz
5. Use Descriptive Changesβ
When working on stacks, write clear change messages:
atomic record -m "[feature-auth] Add JWT token validation"
atomic record -m "[bugfix-123] Fix memory leak in parser"
Stack Operations Referenceβ
Creating Stacksβ
# Basic creation
atomic stack new <name>
# Create from specific change
atomic stack new <name> --from <change-hash>
# Create and switch
atomic stack new <name> && atomic stack switch <name>
Listing Stacksβ
# List local stacks
atomic stack list
# Show current stack
atomic stack current
# List remote stacks
atomic stack list --remote <remote>
Switching Stacksβ
# Switch to existing stack
atomic stack switch <name>
# Switch and update working copy
atomic stack switch <name> && atomic reset
Renaming Stacksβ
# Rename a stack
atomic stack rename <old-name> <new-name>
Deleting Stacksβ
# Delete local stack
atomic stack delete <name>
# Force delete with unrecorded changes
atomic stack delete <name> --force
Working with Remote Stacksβ
Pushing Stacksβ
# Push stack to remote
atomic push <remote> <stack-name>
# Push all local stacks
atomic push <remote> --all
# Push and set upstream
atomic push -u <remote> <stack-name>
Pulling Stacksβ
# Pull changes from remote stack
atomic pull <remote> <stack-name>
# Pull and create local stack
atomic pull <remote> <stack-name> --create-local
Tracking Remote Stacksβ
# Set upstream for current stack
atomic stack set-upstream <remote>/<stack-name>
# Show upstream configuration
atomic stack show-upstream
Advanced Stack Techniquesβ
Stack Splittingβ
Create a new stack based on a specific point in history:
# Split from a specific change
atomic stack new hotfix-production --from <production-change>
# Make emergency fixes
atomic record -m "Emergency security patch"
# Apply to multiple stacks
atomic stack switch main
atomic apply <hotfix-change>
atomic stack switch release-1.0
atomic apply <hotfix-change>
Stack Comparisonβ
Compare the state of different stacks:
# See differences between stacks
atomic diff --stack main --stack feature-xyz
# List changes unique to a stack
atomic log --stack feature-xyz --not-in main
Stack Merging Strategiesβ
Different approaches for integrating stack work:
Fast-Forward Merge (all changes):
atomic stack switch main
atomic pull . feature-complete
Selective Merge (specific changes):
atomic stack switch main
atomic apply <change-1>
atomic apply <change-3>
atomic apply <change-5>
Squash Merge (combine changes):
# Record a new change that incorporates all feature work
atomic stack switch main
atomic pull . feature-xyz
atomic unrecord <last-n-changes>
atomic record -m "Implement feature XYZ"
Troubleshootingβ
Stack Switch Issuesβ
Problem: Cannot switch stacks due to unrecorded changes
# Solution 1: Record changes first
atomic record -m "WIP: Work in progress"
atomic stack switch <target>
# Solution 2: Reset working copy
atomic reset --hard
atomic stack switch <target>
Problem: Working copy out of sync after switch
# Solution: Update working copy
atomic reset
Stack Conflictsβ
Problem: Conflicting changes between stacks
# Solution: Use Atomic's conflict resolution
atomic pull . <source-stack>
# Atomic will highlight conflicts in files
# Resolve conflicts and record
atomic record -m "Resolve conflicts from <source-stack>"
Files Persist Across Stack Switchesβ
Problem: Created a file on one stack, but it appears on other stacks when switching
# Example scenario:
atomic stack new feature
atomic record new-file.txt -m "Add feature"
atomic stack switch main
ls # new-file.txt still exists!
Why This Happens: Stacks share the same working copy. Only patch history is isolated, not the filesystem.
Solution: This is expected behavior! The file is:
- β
Recorded on
featurestack (in patch history) - β Untracked on
mainstack (not recorded there)
To verify isolation, check the logs:
atomic stack switch main
atomic log # Does NOT show "Add feature" change
atomic stack switch feature
atomic log # DOES show "Add feature" change
If you want to clean up untracked files:
atomic stack switch main
rm new-file.txt # Manual cleanup
# Or add to .atomicignore to ignore it
See Stacks are NOT Git Branches for detailed explanation.
Stack Not Foundβ
Problem: Stack doesn't exist locally
# Solution: Pull from remote
atomic pull <remote> <stack-name> --create-local
# Or create new stack
atomic stack new <stack-name>
Integration with Other Commandsβ
Stacks work seamlessly with other Atomic commands:
atomic record: Records changes to the current stackatomic apply: Applies changes from any stack to current stackatomic unrecord: Removes changes from current stackatomic push: Pushes current stack to remoteatomic pull: Pulls changes into current stackatomic log: Shows history of current stackatomic diff: Compares changes in current stackatomic tag: Tags current stack state
Stack Command Referenceβ
For detailed information about the stack command, see:
atomic stack- Complete stack management reference
Native Stacked Diffs: Compositional Patch Workflowβ
Atomic provides the only truly native stacked diffs solution because patches with dependency tracking ARE stacking. Unlike Git-based platforms that require complex tooling (Graphite, Gerrit) to paper over snapshot-based commits, Atomic's patch-based model makes stacked workflows natural and requires zero additional infrastructure.
The Core Insightβ
In Atomic, stacking happens automatically. Every time you atomic record, you create a patch that depends on the current state. Three consecutive records = a stack of three changes. No "stack create" command needed, no metadata files, no rebasing ever.
# This creates a stack naturally:
atomic record -m "Add database schema" # Change 1
atomic record -m "Add API endpoint" # Change 2 (depends on 1)
atomic record -m "Add UI component" # Change 3 (depends on 2)
# You now have a stack: 1 β 2 β 3
# Dependencies tracked automatically in the graph
Why This is Revolutionaryβ
The Stacked Diffs Problem (from Git):
- Finish Feature A, submit for review β wait for approval
- Can't start Feature B (depends on A) β context switch, productivity loss
- Tools like Graphite try to fix this with complex rebasing and metadata
The Atomic Solution:
- Finish Feature A β
atomic recordβ immediately start Feature B - Feature B automatically depends on A (tracked in graph)
- No waiting, no rebasing, no context switching
- Changes maintain identity (hash never changes)
The Basic Workflowβ
1. Creating a Stack (Keep Working Continuously)β
# Start a feature stack (optional - helps organize work)
atomic stack new feature-auth
atomic stack switch feature-auth
# Build continuously without waiting for reviews
atomic record schema.sql -m "Add user schema" # ABC123
atomic record api.js -m "Add API endpoint" # DEF456 (depends on ABC123)
atomic record ui.jsx -m "Add frontend UI" # GHI789 (depends on DEF456)
atomic record tests.js -m "Add integration tests" # JKL012 (depends on GHI789)
# Push for review (all changes submitted immediately)
atomic push origin feature-auth
# You've created a stack! Dependencies are automatic:
# JKL012 β GHI789 β DEF456 β ABC123 β main
#### 2. Viewing Your Stack
```bash
# See your stack with dependencies
atomic log
# See what depends on a specific change
atomic dependents ABC123
# Output: DEF456, GHI789, JKL012 (everything that depends on ABC123)
#### 3. Updating a Change (Forward-Only Progression!)
**Scenario:** Reviewer requests changes to ABC123 (the database schema).
**Git workflow** would require:
1. Checkout the commit
2. Amend it (changes hash!)
3. Rebase all dependent commits (changes all hashes!)
4. Resolve conflicts
5. Force push
**Atomic workflow** (forward-only):
```bash
# IMPORTANT: Atomic is forward-only - you can only amend the TIP of the stack!
# You cannot amend changes that have dependents.
# If ABC123 has dependents, you have two options:
# Option 1: Unrecord dependents, amend, then re-record
atomic unrecord GHI789 # Unrecord in reverse dependency order
atomic unrecord DEF456
atomic unrecord ABC123 # Now you can unrecord ABC123
# Make your changes
vi schema.sql
atomic record schema.sql -m "Better schema" # Creates new change with new hash
# Rebuild the stack forward
atomic record api.js -m "Add API endpoint" # Re-create DEF456
atomic record ui.jsx -m "Add frontend UI" # Re-create GHI789
# Option 2: Create a new change that supersedes the old one
# Keep building forward on the stack
atomic record schema-fixes.sql -m "Schema improvements" # XYZ123 (new change)
# Stack is now: ABC123 β DEF456 β GHI789 β XYZ123
# When landing, you can choose which changes to apply
# Push updates
atomic push origin feature-auth
What's happening:
- Atomic is forward-only - history always grows forward
- You can't rewrite history that other changes depend on
--amendonly works on the tip of the stack (latest change with no dependents)- When you amend, you create a NEW change with a NEW hash (content-addressed)
- This ensures mathematical consistency in the dependency graph
4. Landing Changes Individuallyβ
As changes are approved, land them individually:
```bash
# ABC123 approved - land it
atomic stack switch main
atomic apply ABC123
# Atomic automatically updates remaining changes:
# - DEF456, GHI789, JKL012 now depend on main (which includes ABC123)
# - Hashes stay the same!
# DEF456 approved - land it
atomic apply DEF456
# Remaining changes (GHI789, JKL012) update to depend on new main
# Continue until stack is complete
atomic apply GHI789
atomic apply JKL012
The power:
- Forward-only progression means no history rewriting
- Each change lands independently when ready
- Dependencies are forward pointers that naturally update
- No "merge the whole PR or nothing"
Advanced: Nested Stacks (Multi-Dimensional Patching)β
This is where Atomic becomes revolutionary: stacks of stacks with compositional merging.
Use Case 1: Experimental Stacksβ
# Building a feature
atomic stack new feature-payments
atomic record db.sql -m "Payment schema" # ABC
atomic record api.js -m "Payment API" # DEF
# Try a different approach without losing current work
atomic split payments-refactor # Split from current state
atomic stack switch payments-refactor
# Build alternative implementation
atomic record api-v2.js -m "Rewrite API" # GHI (completely different)
atomic record tests.js -m "New test suite" # JKL
# Test shows refactor is better! Bring it back to parent
atomic stack switch feature-payments
atomic apply GHI # Cherry-pick the rewrite
atomic apply JKL # Get the tests
# DEF is now semantically replaced by GHI
# Atomic's semantic merge understands the relationship
Use Case 2: Parallel Review with Major Revisionsβ
# Build initial stack
atomic stack new user-management
atomic record schema.sql -m "User schema" # ABC (in review)
atomic record api.js -m "User API" # DEF (not ready yet)
atomic record ui.jsx -m "User UI" # GHI (not ready yet)
# Reviewer: "ABC needs major rewrite, but don't block DEF/GHI"
# Solution: Rework in isolation
atomic split schema-rework # New stack for experimentation
atomic stack switch schema-rework
# Completely rewrite the schema
atomic record schema-v2.sql -m "Better schema" # XYZ
# Test with API (bring it to experiment stack)
atomic apply DEF # Now testing XYZ + DEF together
# Works!
# Test with UI too
atomic apply GHI # Now testing XYZ + DEF + GHI
# All good!
# Bring the rewrite back to parent
atomic stack switch user-management
atomic apply XYZ # Land the new schema
# Atomic semantically updates DEF and GHI:
# - They now depend on XYZ instead of ABC
# - Hashes stay the same
# - Dependencies are forward pointers
Use Case 3: Multi-Team Collaborationβ
# Backend team starts
atomic stack new feature-backend
atomic record schema.sql -m "Schema" # ABC
atomic record api.js -m "API" # DEF
# Frontend team splits to work in parallel
atomic split feature-frontend
atomic stack switch feature-frontend
atomic record ui.jsx -m "UI" # GHI
atomic record styles.css -m "Styles" # JKL
# Backend team improves API
atomic stack switch feature-backend
atomic record api-v2.js -m "API improvements" # MNO
# Frontend pulls backend's improvements
atomic stack switch feature-frontend
atomic apply MNO # Get the API improvements
# GHI and JKL automatically update to work with MNO!
# Frontend finishes first - contribute back
atomic stack switch feature-backend
atomic apply GHI # Pull UI to backend stack
atomic apply JKL # Pull styles
# Now backend stack has everything: ABC, MNO, GHI, JKL
# Land to main as each piece is approved
Why Atomic is the ONLY Native Solutionβ
Git + Graphite/Gerrit Limitationsβ
Problem 1: Rebasing Required
- Change an earlier commit β rewrite all dependent commits
- All commit hashes change
- Complex tooling to manage
- Frequent conflicts
Problem 2: Metadata Files
- Need
.graphiteorChange-Idtracking - Metadata can get out of sync
- Doesn't work offline
- Requires external tool
Problem 3: No Semantic Merge
- Can't move changes between branches without duplicates
- Can't cherry-pick without creating new commits
- Can't compose patches from different branches
Atomic's Native Advantagesβ
1. No Rebasing - Forward-Only Progression
# Amend only works on tip of stack (no dependents)
atomic record --amend ABC123 # Only if nothing depends on ABC123
# For changes with dependents, evolve forward:
atomic record -m "Improved version" # Creates new change
# History grows forward, never rewrites backward
2. No Metadata - Graph IS the Truth
# Dependencies tracked in database graph
atomic dependents ABC123 # Query the graph directly
# No external files, no sync issues
3. Semantic Merge - Compositional Patching
# Same change = same hash everywhere
# Can move patches between stacks
atomic apply <hash> # Works across any stack
# Semantic merge understands relationships
4. Multi-Dimensional Stacking
# Stacks can split and merge
atomic split experiment # Branch for experiments
atomic apply <hash> # Compose patches back
# Patches maintain identity across all stacks
The Mathematical Foundationβ
Atomic's patch theory provides guarantees that make this possible:
- Commutativity: If patches A and B don't conflict, they can be applied in any order
- Associativity: (A + B) + C = A + (B + C)
- Content-Addressed: Same content = same hash, always
- Forward Dependencies: Changes reference what they depend on, not what depends on them
This means:
- No hidden state (unlike Git's implicit parent pointers)
- Predictable merge behavior
- Change identity is immutable
- Patches compose naturally
CLI Commands Referenceβ
Essential Commandsβ
# Create and manage stacks
atomic stack new <name> # Create new stack
atomic split <name> # Split current stack (create child)
atomic stack switch <name> # Switch between stacks
atomic stack list # List all stacks
# Build your stack (core workflow)
atomic record -m "message" # Add change to current stack
atomic record --amend <hash> # Update existing change (no rebasing!)
# View dependencies
atomic log # See changes in current stack
atomic dependents <hash> # See what depends on a change
# Move patches between stacks
atomic apply <hash> # Apply change from any stack to current
# Land to main
atomic stack switch main
atomic apply <hash> # Land individual changes as approved
Advanced Commands (Planned)β
# Stack visualization
atomic log --deps # Show dependency graph
atomic stack show --tree # Show stack hierarchy
# Dependency management
atomic dependents <hash> --all # Show deps across all stacks
atomic stack merge <child> # Merge child stack into parent
# Change management
atomic stack split-change <hash> # Split large change into smaller ones
atomic stack squash <hash1> <hash2> # Combine changes
Comparison: Atomic vs Everything Elseβ
| Feature | Git + Graphite | Gerrit | Phabricator | Atomic |
|---|---|---|---|---|
| Rebasing Required | Constant | Frequent | Frequent | β Never |
| Change Identity | Changes on rebase | Stable Change-Id | Stable | β Immutable hash |
| Nested Stacks | β Complex | β No | β No | β Native |
| Dependency Tracking | Metadata files | Server-side | Server-side | β In graph DB |
| Semantic Merge | β | β | β | β Patch theory |
| Offline Stacking | Limited | β | β | β Full |
| Multi-dimensional | β | β | β | β Compositional |
| External Tool | Required | Optional | Required | β None |
Real-World Workflow Exampleβ
# Day 1: Start feature, build continuously
atomic stack new user-management
atomic stack switch user-management
atomic record schema.sql -m "Add users table" # ABC
atomic record api.js -m "User CRUD API" # DEF
atomic record ui.jsx -m "User list UI" # GHI
atomic record tests.js -m "Integration tests" # JKL
# Push entire stack for review
atomic push origin user-management
# Day 2: Reviewer wants schema changes
# ABC has dependents, so we evolve forward
atomic unrecord JKL # Remove dependent changes in reverse order
atomic unrecord GHI
atomic unrecord DEF
atomic unrecord ABC
# Make improvements
vi schema.sql
atomic record schema.sql -m "Improved user schema" # New ABC (new hash!)
atomic record api.js -m "User CRUD API" # Re-create DEF
atomic record ui.jsx -m "User list UI" # Re-create GHI
atomic record tests.js -m "Integration tests" # Re-create JKL
# Forward-only: history never rewrites, only grows
atomic push origin user-management
# Day 2 (later): Try different UI approach
atomic split ui-experiment
atomic stack switch ui-experiment
atomic record ui-v2.jsx -m "Alternative UI" # MNO
# Day 3: Like the new UI, bring it back
atomic stack switch user-management
atomic apply MNO # Replace GHI with MNO
atomic push origin user-management
# Day 4: Main moves forward with security patch
atomic stack update
# All changes update to new main (no rebase!)
atomic push origin user-management
# Day 5-7: Land as approved
atomic stack switch main
atomic apply ABC # Schema approved
atomic apply DEF # API approved
atomic apply MNO # New UI approved
atomic apply JKL # Tests approved
# Stack complete! No rebasing ever happened.
Implementation Statusβ
Current (v1.3.0):
- β Stack working copy isolation fixed
- β
atomic stack new/switch/list- Stack management - β
atomic split- Create child stacks - β
atomic record- Natural stacking - β
atomic apply- Move patches between stacks - β
atomic dependents- Query dependency graph
Phase 1 (Q1 2025):
-
atomic stack cascade- Push changes from parent to all child stacks (KILLER FEATURE) -
atomic stack status- Show if stack is behind parent -
atomic record --amend- Update tip of stack (forward-only) -
atomic log --deps- Visualize dependency graph - Better CLI output showing dependencies
-
atomic stack merge- Merge child stack to parent
Phase 2 (Q2 2025):
- Web UI stack visualization
- Per-change code review interface
- Real-time collaboration features
- CI integration per change
Phase 3 (Q3 2025):
- Automated landing workflows
- Smart conflict detection
- Multi-stack dependency visualization
- Performance optimizations
See Alsoβ
- Remote Operations - Working with remote stacks
- Working with Changes - Recording and managing changes
- Tags - Tagging stack states for releases
- Repository Management - Setting up repositories with stacks
Next Steps:
- Explore stack command for detailed usage
- Learn about remote operations for distributed workflows
- Understand change management within stacks