Cómo trabajamos en el mismo repo Sharkcode sin pisarnos los commits. 3 escenarios, ownership map, daily workflow, conflict resolution.
noelia-XYZ. Día 1 Michel crea con vos el primer branch noelia-etsy-launch. Después cada task largo (Wedding template, brand identity, etc) tiene su branch propio. Michel resta en main.git pull antes de git push en tu branch. Si saltás esto, Git te rechaza con error claro (no rompe nada, te avisa).main via PR controlado (cuando task tuyo está completo). Michel reviewa + merge. Audit trail rigoroso, zero rischio overlap.Los tres casos posibles cuando vos + Michel trabajan en el mismo repo sharkcode. De seguro a riesgoso.
Cómo: Michel queda en main, vos creas branch noelia-etsy-launch (o noelia-mariposa-practice per Wedding fittizio, o noelia-cliente-X per Wedding reale Day 30+).
# Día 1 vos creas tu primer branch (Michel te guida)
git checkout main
git pull origin main
git checkout -b noelia-etsy-launch
# Trabajás durante el día
git add clients/noelia-etsy/listings/etsy-001.md
git commit -m "feat(noelia-etsy): primer listing draft ES + EN"
# Push a tu branch (NO main directo, NUNCA)
git push origin noelia-etsy-launch
# Michel queda en main, no se entera ni le importa
# Cuando tu task completo + revisado, merge a main via PR controlado
Quando finished todo el work del branch (es. todos los listings Etsy o template Mariposa completo), pedís a Michel review + merge:
# Push final tu branch
git push origin noelia-etsy-launch
# Mensaje WhatsApp a Michel:
# "Listo branch noelia-etsy-launch para review + merge a main"
# Michel hace:
# git checkout main
# git pull origin main
# git merge --no-ff noelia-etsy-launch
# git push origin main
# git branch -d noelia-etsy-launch (delete local)
# git push origin --delete noelia-etsy-launch (delete remote, opcional)
# Después vos recreas branch fresh para próximo task
git checkout main
git pull origin main
git checkout -b noelia-cliente-X-launch
Pro: cero rischio overlap, audit trail rigoroso, scaling-ready multi-cliente paralleli, structured PR-based. Contra: overhead branch management + Michel deve fare merge manuale. Confirmed Day 1+: decisione Michel.
Cómo: Ambos trabajamos en main. Michel toca clients/mary-logopedista/*, vos tocás clients/noelia-etsy/* + .planning/business/atelier-noelia/*. Archivos diferentes.
# Vos antes de empezar la sesion
git pull origin main # Bajás los cambios de Michel del día anterior
# Trabajás durante el día
git add clients/noelia-etsy/listings/etsy-001.md
git commit -m "feat(noelia-etsy): listing 1 draft ES + EN"
# Antes de subir, pull otra vez (Michel pudo haber pushed mientras vos trabajabas)
git pull origin main # Git mergea automatic porque archivos diferentes
git push origin main # Sube limpio
Pro: simple, sin overhead. Contra: requiere disciplina pull → work → pull → push. Cuándo: Day 1-30 default, naturalmente safe.
Cuándo puede pasar: ambos editamos .planning/stato-lavoro-os.md el mismo día (cosa rara, lo edita Michel principalmente), o MEMORY.md index (yo decidí dejar memorias).
# Vos haces git pull y Git dice:
CONFLICT (content): Merge conflict in .planning/stato-lavoro-os.md
Auto-merging .planning/stato-lavoro-os.md
Automatic merge failed; fix conflicts and then commit the result.
# El archivo tendrá marcadores que vos ves abriendo VSCode:
<<<<<<< HEAD
[tu version del párrafo]
=======
[la version de Michel]
>>>>>>> main
# Lo arreglás manualmente (decidís qué línea queda) + commit
git add .planning/stato-lavoro-os.md
git commit -m "merge: resolve stato-lavoro-os conflict"
git push
Pro: Git te avisa, no rompe nada silently. Contra: primera vez es confuso. Mitigation: regla 3 del TL;DR (avisar en chat antes de editar shared files).
Force push reescribe historia del remoto, puede borrar commits de Michel. Catastrófico. Nunca uses force push sin que Michel te lo apruebe explicito + tenga backup. Para 99% de casos normal push + pull alcanza.
Para evitar Escenario C confuso, sabemos antes quién es owner de qué directorio. Si querés tocar algo del lado Michel, avisás en chat.
clients/mary-logopedista/*clients/valerio-casa-riposo/*clients/lindorug/*clients/sharkcode-self/*clients/[otros]/* (los 6+ existentes)tools/orchestrator/*templates/*.claude/agents/*memory/* (su home Win, no en repo)memory-shared/* (escribe via PowerShell)CLAUDE.md root.planning/RESUME-PROMPT-*.planning/business/path-4-*.planning/stato-lavoro-os.md (write principale)clients/noelia-etsy/*.planning/business/atelier-noelia/listings/* (TBD Day 14+).planning/business/atelier-noelia/canva-exports/* (TBD).planning/business/atelier-noelia/brand/* (TBD post Future Session 2)../Wedding-Templates/templates/cliente-fittizio-* (Day 2-7 practice)../Wedding-Templates/templates/cliente-real-* (Day 30+ post-Michel-assign).planning/stato-lavoro-os.md · CHANGELOG.md · .planning/business/atelier-noelia/NEXT-SESSION-CLEAN.md. Si necesitás tocar uno, "Michel, voy a editar X". El te dice "dale" o "espera, primero subo lo mío".
Tu rutina cada vez que abrís el laptop para trabajar. Memorizada en 3-5 días.
# 1. Ir al repo
cdsc # alias zshrc, va a ~/Code/sharkcode
# 2. Bajar cambios de Michel (commit que pueda haber hecho la noche anterior)
gp # alias = git pull
# 3. Ver qué hay nuevo (opcional, para entender contexto)
gl # alias = git log --oneline -10
# 4. Abrir VSCode workspace multi-root
code ~/Code/noelia.code-workspace
# Editás archivos via Claude o manual VSCode
# Ver qué cambió (cuando querés)
gs # alias = git status
# Cuando terminás un bloque de trabajo (cada 1-2 hr), commit
git add clients/noelia-etsy/listings/etsy-001.md
gc "feat(noelia-etsy): listing 1 draft ES translation"
# alias gc = git commit -m
# 1. Pull primero (Michel pudo haber pushed durante el día)
gp # git pull
# 2. Si pull mergea automatic = OK, push
git push origin main
# 3. Si pull dice CONFLICT en algún archivo, ver Escenario C arriba
# (raro, generalmente solo si tocaste shared file sin avisar)
feat(noelia-etsy):, fix(noelia-etsy):, chore(noelia-etsy): o docs(atelier-noelia): para que sea fácil filtrar tus commits separados de Michel. Ejemplos en git log --author="Noelia".
Primera vez que te pasa, abrir esta sección. Después memorizado en 5 min.
<<<<<<< HEAD
[tu version del párrafo]
=======
[la version de Michel]
>>>>>>> main
<<<<<<<, =======, >>>>>>>.git add .planning/stato-lavoro-os.md
git commit -m "merge: resolve stato-lavoro-os conflict"
git push origin main
git push --force sin que Michel te lo apruebe explicito. Force push borra historia, irreversible. 99% de conflicts se arreglan con resolution manual + commit normal.
Wedding-Templates es otro repo, NO parte de sharkcode/. Reglas similares pero scope distinto.
master (NO main)
Wedding-Templates usa master como branch principal (convencion antigua, no se migró a main). Cuando trabajás ahí, comandos son:
cdwt # alias = cd ~/Code/Wedding-Templates
git checkout master # NO "git checkout main" (no existe)
git pull origin master
git push origin master
Para esercizio practice cliente fittizio "Mariposa Wedding" (Day 2-7 FLOW-DAY-1 Phase 3b):
# 1. Crear branch dedicado practice (NO tocar master directo)
cdwt
git checkout master
git pull origin master
git checkout -b noelia-mariposa-practice
# 2. Duplicar template existente (Claude lo hace por vos)
# "Claude, duplicá federica-lorenzo para cliente fittizio Mariposa Wedding palette verde menta"
# 3. Iterar + commit a tu branch
git add templates/mariposa-wedding/
git commit -m "feat(mariposa-practice): customization Noelia practice"
# 4. Push a tu branch (NO merge a master, es practice fittizio)
git push origin noelia-mariposa-practice
# 5. Cuando practice termina, branch queda como reference (Michel decide si merge o delete)
Cuando Michel te asigna cliente real Wedding (post-onboarding pair-mode):
cliente-[nombre] dedicado (NO master)node tools/ftp-deploy.mjs o pnpm --filter cliente build + VercelEtsy listings reales viven en Etsy seller dashboard (web), NO en Git. Cero conflict possible.
Tu workflow Etsy real Day 14+:
clients/noelia-etsy/listings/etsy-NNN.md + canva-exports/etsy-NNN.pnggit add clients/noelia-etsy/listings/etsy-001.md
git add clients/noelia-etsy/canva-exports/etsy-001.png
gc "feat(noelia-etsy): listing 001 live - wedding planner ES"
gp # pull si Michel commited mientras vos trabajabas
git push origin main
clients/noelia-etsy/* es exclusivamente tuya. Michel no la toca nunca.
Git te rechaza el push con mensaje:
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'origin'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
NO rompe nada. Solucion: gp && git push origin main. Listo.
Vos no responsable. Le decís en chat: "Michel, el último commit X rompió Y". El revierte con git revert (NO force push). Vos hacés gp después de su fix.
No. Branches que no creaste vos NO los borres. Si querés limpiar el tuyo (noelia-etsy-launch después de merge), preguntás a Michel primero.
Branch dedicado experiment-XYZ:
git checkout -b experiment-noelia-test
# Trabajás, commitás, push al tuo branch
# Si funciona: pedís merge a Michel
# Si NO funciona: git branch -D experiment-noelia-test (borrás solo tu branch)
Cero riesgo para Michel porque tu branch es aislado.
Claude chat. "Claude, no estoy segura si tengo que hacer pull o push primero, mostrame git status + git log + decime qué hacer". Te dice paso a paso. Día 30+ vos sabrás solo, pero primer mes Claude te ayuda en tiempo real.