Team Collaboration
Learn how to work effectively with your team using Ivaldi.
Setting Up for Collaboration
Initial Setup
# Clone team repository
ivaldi download team/project
cd project
# Configure your identity
ivaldi config --set user.name "Your Name"
ivaldi config --set user.email "you@company.com"
GitHub Authentication
# Option 1: GitHub token
export GITHUB_TOKEN="your_token"
# Option 2: GitHub CLI
gh auth login
Daily Team Workflow
Morning Sync
Start your day by syncing with the team:
# See what's new on remote
ivaldi scout
# Update main timeline
ivaldi timeline switch main
ivaldi harvest --update
# Check status
ivaldi log --limit 5
Work on Feature
# Create your feature timeline
ivaldi timeline create feature-user-dashboard
# Make changes
vim src/dashboard.js
ivaldi gather .
ivaldi seal "Add dashboard layout"
# Push for team visibility
ivaldi upload
End of Day
# Push your progress
ivaldi gather .
ivaldi seal "WIP: Dashboard - completed layout, need to add data"
ivaldi upload
# Teammates can now see your work!
Reviewing Teammate’s Work
Discover and Download
# See what timelines are available
$ ivaldi scout
Remote timelines available:
main
feature-authentication (Alice)
feature-payment (Bob)
bugfix-validation (Carol)
# Download Alice's branch
ivaldi harvest feature-authentication
Review Changes
# Switch to teammate's timeline
ivaldi timeline switch feature-authentication
# Review commits
ivaldi log
# See what changed
ivaldi diff main
# Test locally
npm test
Provide Feedback
# Add improvements
vim src/auth.js
ivaldi gather .
ivaldi seal "Add error handling to login flow"
# Push back
ivaldi upload
# Alice will see your contribution!
Contributing to Shared Timeline
Pull Latest Changes
# Switch to shared timeline
ivaldi timeline switch feature-payment
# Get latest from remote
ivaldi harvest feature-payment --update
Add Your Changes
# Make improvements
vim src/payment/stripe.js
ivaldi gather .
ivaldi seal "Add Stripe webhook handling"
# Push
ivaldi upload
Sync Regularly
# Before starting work
ivaldi harvest feature-shared --update
# After making changes
ivaldi upload
# This minimizes conflicts
Handling Team Changes
Merge Main into Feature
Keep your feature up-to-date with main:
# Switch to your feature
ivaldi timeline switch feature-dashboard
# Get latest main
ivaldi harvest main --update
# Merge main into feature
ivaldi fuse main to feature-dashboard
# Resolve any conflicts
ivaldi fuse --strategy=theirs main to feature-dashboard
# or manually resolve
# Push updated feature
ivaldi upload
Update Multiple Features
# Get all updates
ivaldi scout
ivaldi harvest --update
# Update each feature timeline
for timeline in feature-a feature-b feature-c; do
ivaldi timeline switch $timeline
ivaldi fuse main to $timeline
done
Code Review Workflow
Prepare for Review
# Ensure clean history
ivaldi log
# Push final version
ivaldi gather .
ivaldi seal "Final: User dashboard with all features"
ivaldi upload
Review Process
Reviewer:
# Get feature branch
ivaldi scout
ivaldi harvest feature-user-dashboard
# Switch and review
ivaldi timeline switch feature-user-dashboard
ivaldi log
ivaldi diff main
# Test
npm test
# Approve by merging
ivaldi timeline switch main
ivaldi fuse feature-user-dashboard to main
ivaldi upload
Request Changes
Reviewer:
# Add comments as commits
ivaldi gather .
ivaldi seal "Review: Add input validation on line 42"
ivaldi upload
Author responds:
# Get reviewer's comments
ivaldi harvest feature-user-dashboard --update
# Make changes
vim src/dashboard.js
ivaldi seal "Address review: Add input validation"
ivaldi upload
Selective Sync
Ivaldi’s killer feature for teams: download only what you need.
Download Specific Features
# See all branches
$ ivaldi scout
Remote timelines available:
main
feature-auth
feature-payment
feature-ui
feature-mobile
feature-analytics
experimental-redesign
# Only download what you need
ivaldi harvest feature-auth feature-payment
# Skip the rest!
# Saves bandwidth and disk space
Team Benefits
# Frontend developer: Only get UI branches
ivaldi harvest feature-ui feature-design
# Backend developer: Only get API branches
ivaldi harvest feature-api feature-database
# Full-stack: Get what you need when you need it
ivaldi scout
ivaldi harvest feature-auth
# Work on auth...
ivaldi harvest feature-payment
# Now work on payment...
Release Coordination
Preparing Release
Release manager:
# Create release timeline
ivaldi timeline create release-v1.2
# Merge approved features
ivaldi fuse feature-auth to release-v1.2
ivaldi fuse feature-payment to release-v1.2
ivaldi fuse feature-ui to release-v1.2
# Final testing
ivaldi seal "Update version to 1.2.0"
ivaldi seal "Update changelog"
# Merge to main
ivaldi timeline switch main
ivaldi fuse release-v1.2 to main
ivaldi upload
Team members:
# Get release timeline for testing
ivaldi harvest release-v1.2
ivaldi timeline switch release-v1.2
# Test and report
Conflict Resolution
Preventing Conflicts
# Sync frequently
ivaldi harvest main --update
ivaldi fuse main to feature-branch
# Small, focused changes
# Communicate with team
Resolving Conflicts
$ ivaldi fuse feature-a to main
[CONFLICTS] Merge conflicts detected:
CONFLICT: src/shared.go
# Strategy 1: Accept their changes
ivaldi fuse --strategy=theirs feature-a to main
# Strategy 2: Keep our changes
ivaldi fuse --strategy=ours feature-a to main
# Strategy 3: Manual resolution
vim src/shared.go # Edit file
ivaldi gather src/shared.go
ivaldi fuse --continue
Communication
When conflicts occur:
- Talk to teammate who worked on conflicted file
- Decide on resolution together
- Apply agreed-upon changes
- Test thoroughly
Team Best Practices
Naming Conventions
Agree on timeline naming:
# By person
alice/feature-auth
bob/feature-payment
# By type
feature/authentication
bugfix/memory-leak
hotfix/security-patch
# By ticket
JIRA-123-add-login
JIRA-456-fix-validation
Commit Messages
Use consistent format:
# Good team messages
ivaldi seal "feat: Add OAuth2 authentication"
ivaldi seal "fix: Resolve memory leak in parser"
ivaldi seal "docs: Update API documentation"
# Include ticket numbers
ivaldi seal "JIRA-123: Implement user login endpoint"
Regular Syncing
# Morning routine
ivaldi scout
ivaldi harvest --update
# Before starting work
ivaldi harvest main --update
ivaldi fuse main to feature-branch
# Before ending day
ivaldi upload
Feature Timeline Lifecycle
- Create:
ivaldi timeline create feature-name - Push early:
ivaldi upload(even WIP) - Sync daily:
ivaldi fuse main to feature-name - Communicate: Let team know about significant changes
- Review: Request code review
- Merge: Integrate into main
- Clean: Remove merged timeline
Team Communication Patterns
Feature Handoff
Developer A:
ivaldi seal "WIP: Authentication - completed login, need logout"
ivaldi upload
# Message team: "Login complete, can someone add logout?"
Developer B:
ivaldi harvest feature-auth
ivaldi timeline switch feature-auth
ivaldi seal "Add logout endpoint"
ivaldi upload
# Message: "Logout added!"
Pair Programming
# Developer A drives
ivaldi gather .
ivaldi seal "Add validation logic"
ivaldi upload
# Developer B takes over
ivaldi harvest feature-shared --update
ivaldi gather .
ivaldi seal "Add error handling"
ivaldi upload
# Developer A continues
ivaldi harvest feature-shared --update
# ...
Code Review Comments
# Reviewer
ivaldi timeline switch feature-to-review
ivaldi seal "Review: Consider using factory pattern here"
ivaldi seal "Review: Need unit tests for this function"
ivaldi upload
# Author sees and addresses
ivaldi harvest feature-to-review --update
ivaldi log
# Make changes based on feedback
Large Team Strategies
Component Teams
# Frontend team
ivaldi harvest feature-ui-*
# Backend team
ivaldi harvest feature-api-*
# Mobile team
ivaldi harvest feature-mobile-*
Integration Timeline
# Create integration timeline
ivaldi timeline create integration-sprint-42
# Each team merges their work
ivaldi fuse feature-ui-dashboard to integration-sprint-42
ivaldi fuse feature-api-users to integration-sprint-42
# Test integration
# Fix issues
# Merge to main when ready
ivaldi fuse integration-sprint-42 to main
Troubleshooting
Someone Pushed Breaking Changes
# Use time travel to before breakage
ivaldi travel
# Select good commit, diverge
# Continue work on stable base
Accidentally Pushed to Wrong Branch
# Download correct branch
ivaldi harvest correct-branch
# Cherry-pick changes
ivaldi timeline switch correct-branch
# Manually apply changes
ivaldi gather .
ivaldi seal "Moved changes to correct branch"
ivaldi upload
Lost Local Work
# Check all timelines
ivaldi timeline list
# Check each timeline
ivaldi timeline switch feature-x
ivaldi status
# If pushed, re-download
ivaldi harvest feature-x --update
Summary
Team collaboration essentials:
- Scout & Harvest: Discover and selectively download branches
- Regular Syncing: Stay up-to-date with team changes
- Clear Communication: Use descriptive names and messages
- Code Review: Collaborate on timelines
- Conflict Resolution: Use strategies or communicate
Key commands:
ivaldi scout- See remote branchesivaldi harvest- Download branches selectivelyivaldi upload- Share your workivaldi fuse- Integrate changes
Next Steps
- Master GitHub Integration
- Learn Timeline Branching
- Review Basic Workflow