8.8 KiB
🔄 Takeover Plan - Job-Info-Prod → Job-Info-Test
Overview
Job-Info-Prod is not a separate project - it's a temporary staging folder to build the production-ready version safely. Once verified working, it will completely replace Job-Info-Test.
Migration Strategy
┌─────────────────────────────────────────────────────────┐
│ Current State: Job-Info-Test (working but incomplete) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Phase 1: Build in Job-Info-Prod (separate folder) │
│ • Opus scaffolds structure │
│ • Sonnet implements functionality │
│ • Test everything thoroughly │
│ • Job-Info-Test remains untouched │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Phase 2: Verification │
│ • Both tokens work (PocketBase + Graph) │
│ • Background refresh running │
│ • API calls successful │
│ • Offline mode functional │
│ • No critical bugs │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Phase 3: Takeover │
│ • Backup Job-Info-Test (optional) │
│ • Delete Job-Info-Test contents │
│ • Move Job-Info-Prod contents to Job-Info-Test │
│ • Job-Info-Test is now the production version │
└─────────────────────────────────────────────────────────┘
Why Separate Folders During Development?
Safety
- ✅ Original working code preserved
- ✅ Can reference old implementation
- ✅ Easy rollback if something breaks
- ✅ No risk during experimentation
Clarity
- ✅ Clear separation: old vs new
- ✅ Can compare implementations
- ✅ Test new version thoroughly
- ✅ Verify everything before replacing
Once Verified
- ✅ Job-Info-Prod becomes Job-Info-Test
- ✅ Only one project exists
- ✅ No confusion about which is "production"
Takeover Process
Step 1: Build & Test (Job-Info-Prod)
# Opus scaffolds structure
cd /home/admin/Job-Info-Prod
# Sonnet implements functionality
# Test everything thoroughly
bun run backend/src/index.ts
# Open frontend, test all features
# Verify:
# ✅ Login works
# ✅ Both tokens obtained
# ✅ Background refresh running
# ✅ API calls work
# ✅ Offline mode works
# ✅ No critical bugs
Step 2: Backup Original (Optional)
# If you want to keep a backup
cd /home/admin
mv Job-Info-Test Job-Info-Test-backup-$(date +%Y%m%d)
# Now you have: Job-Info-Test-backup-20260101/
Step 3: Takeover
# Method A: Rename (simplest)
cd /home/admin
rm -rf Job-Info-Test # Delete old version
mv Job-Info-Prod Job-Info-Test # Rename new version
cd Job-Info-Test
# Done! Job-Info-Test is now the production version
# Method B: Copy contents (if you want to preserve git)
cd /home/admin
rm -rf Job-Info-Test/* # Delete contents (keep folder)
cp -r Job-Info-Prod/* Job-Info-Test/ # Copy new version
cd Job-Info-Test
git add .
git commit -m "Production-ready version with dual-token architecture"
# Done! Job-Info-Test updated in place
Step 4: Cleanup
# Remove staging folder (if using Method A)
rm -rf /home/admin/Job-Info-Prod
# Or keep as backup temporarily
mv /home/admin/Job-Info-Prod /home/admin/Job-Info-Prod-verified
Verification Checklist
Before takeover, verify in Job-Info-Prod:
Authentication
- Login flow works end-to-end
- PocketBase token obtained
- Microsoft Graph token obtained
- Both tokens stored in localStorage
- Both tokens cached in Valkey
- Background refresh loop starts
Token Management
ensureToken('pb')returns fresh tokenensureToken('graph')returns fresh token- Backend refresh endpoint works
- Stale token fallback works (test by killing backend)
- No re-authentication prompts (except login)
API Functionality
- Jobs list loads
- Job detail loads
- Files list loads
- Notes work
- All API calls use token injection
Offline Mode
- App works when backend down
- Stale tokens used as fallback
- No crashes or errors
- Graceful degradation messages
Background Services
- Token refresh loop running
- Tokens refreshed every 30 minutes
- No user-visible interruptions
- Valkey cache updates
Code Quality
- TypeScript compiles with no errors
- All tests pass
- No console errors
- No critical warnings
- Code follows RULES.md patterns
Post-Takeover
After Job-Info-Prod becomes Job-Info-Test:
Update Documentation
- README.md updated
- Remove references to "Job-Info-Prod"
- Update deployment docs
- Update environment setup
Git Management
cd /home/admin/Job-Info-Test
git add .
git commit -m "Production-ready architecture with dual-token system"
git tag v2.0.0-production
git push
Team Communication
- Notify team: Job-Info-Test is now production-ready
- Share updated documentation
- Update deployment procedures
- Archive old version if needed
Rollback Plan (If Needed)
If something goes wrong during takeover:
If Backup Exists
cd /home/admin
rm -rf Job-Info-Test # Remove broken version
mv Job-Info-Test-backup-20260101 Job-Info-Test # Restore backup
cd Job-Info-Test
bun run backend/server.ts # Back to working state
If No Backup
cd /home/admin/Job-Info-Test
git reset --hard HEAD~1 # Or specific commit
# Restore to last working state
Timeline
Phase 1: Build (Job-Info-Prod)
- Opus Scaffolding: 30 minutes
- Sonnet Implementation: 4-6 hours
- Testing: 2-3 hours
- Total: 7-10 hours
Phase 2: Verification
- Feature testing: 1-2 hours
- Bug fixes (if any): 1-3 hours
- Final verification: 30 minutes
- Total: 3-6 hours
Phase 3: Takeover
- Backup: 5 minutes
- Takeover: 5 minutes
- Verification: 15 minutes
- Total: 30 minutes
Grand Total: 10-16 hours from start to production takeover
Key Points
During Development
- ✅ Two folders exist: Job-Info-Test (old) + Job-Info-Prod (new)
- ✅ Job-Info-Test preserved and working
- ✅ Job-Info-Prod is being built and tested
- ✅ No confusion: "Prod" means "production-ready", not "separate production system"
After Takeover
- ✅ Only one folder: Job-Info-Test
- ✅ Contains production-ready code from Job-Info-Prod
- ✅ Job-Info-Prod folder deleted/archived
- ✅ Job-Info-Test is the single source of truth
Naming Clarity
- Job-Info-Test = Current project name (stays the same)
- Job-Info-Prod = Temporary staging folder during rebuild
- After takeover = Job-Info-Test contains production-ready version
Why This Approach?
Pros
✅ Safe: Original code never touched during development
✅ Testable: Can verify everything before replacing
✅ Reversible: Easy rollback if needed
✅ Clear: Separation during development
✅ Simple: One project after takeover
Cons
❌ Temporary disk space: Two folders during development (~100MB each)
❌ Must remember to do takeover: Don't forget final step
Summary
Job-Info-Prod is NOT a separate project.
↓
It's a temporary staging folder.
↓
Build → Test → Verify → Takeover
↓
Job-Info-Test becomes production-ready.
↓
Only one project exists: Job-Info-Test
Status: Ready to scaffold Job-Info-Prod for testing, then takeover Job-Info-Test 🚀