Files
Job-Info/instructions/TAKEOVER_PLAN.md
T
2026-01-09 04:08:06 +00:00

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 token
  • ensureToken('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 🚀