Git Workflow Colaboración · Michel + Noelia

Cómo trabajamos en el mismo repo Sharkcode sin pisarnos los commits. 3 escenarios, ownership map, daily workflow, conflict resolution.

Atelier Noelia · audit ambient mattina 2026-05-24 · doc bilingue ES Latam + IT scope Michel

TL;DR · 3 reglas para no pisarse

  1. Trabajás siempre en branch dedicado tuyo 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.
  2. Siempre git pull antes de git push en tu branch. Si saltás esto, Git te rechaza con error claro (no rompe nada, te avisa).
  3. Merge a main via PR controlado (cuando task tuyo está completo). Michel reviewa + merge. Audit trail rigoroso, zero rischio overlap.
Scenario A branch dedicati = decisione hard Michel 2026-05-24. Structured workflow PR-based da Day 1. Pattern scaling-ready per Day 30+ multi-cliente Wedding paralleli. Cero rischio "pisarse" commits porque Michel main + Noelia branches mai overlap.

3 escenarios · que pasa cuando salvamos commits

Los tres casos posibles cuando vos + Michel trabajan en el mismo repo sharkcode. De seguro a riesgoso.

Escenario A · Branches dedicados (DEFAULT Day 1 confirmed Michel)

Decisione D1 audit ambient mattina 2026-05-24. Structured workflow PR-based da Day 1, scaling-ready per multi-cliente Wedding paralleli Day 30+.

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

Workflow PR merge (cuando task tuyo completo)

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.

Escenario B · Mismo main archivos distintos (ALTERNATIVA opzionale task brevi)

Solo para task minor y triviales (es. fix typo doc, update README, commit micro). NON default per task production.

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.

Escenario C · Mismo archivo editado por ambos (raro)

Solo pasa si ambos tocamos el mismo file. Git te avisa con un mensaje claro.

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).

Anti-escenario · git push --force (NUNCA)

Si te dicen "haz git push --force" o "git push -f" → NO. Pedís a Michel.

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.

Ownership map · quién toca qué

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.

Michel write authority

  • 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)

Noelia write authority

  • 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)
  • Read-only: memory-shared/ (no editás, te llega via PowerShell sync de Michel)
Shared files (avisar en chat antes de editar): .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".

Daily workflow · paso a paso

Tu rutina cada vez que abrís el laptop para trabajar. Memorizada en 3-5 días.

Mañana · empezar la sesion

# 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

Durante el día · trabajar

# 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

Tarde/noche · cerrar la sesion

# 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)
Convenzione commit messages: usá prefijo 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".

Si pasa conflict · paso a paso resolver

Primera vez que te pasa, abrir esta sección. Después memorizado en 5 min.

  1. NO entres en panic. Conflict no rompe nada, solo Git te pide ayuda para decidir qué línea queda.
  2. Abrir VSCode en el archivo con conflict. Va a verse así (resaltado en color):
    <<<<<<< HEAD
    [tu version del párrafo]
    =======
    [la version de Michel]
    >>>>>>> main
  3. Decidís qué queda: tu version, la de Michel, o ambas combinadas. Borrá los marcadores <<<<<<<, =======, >>>>>>>.
  4. Si dudás, abrí Claude chat: "Claude, tengo un merge conflict en .planning/stato-lavoro-os.md, mostrame las dos versiones y ayudame a decidir". Claude lee + te explica + sugiere resolución.
  5. Confirmás al final:
    git add .planning/stato-lavoro-os.md
    git commit -m "merge: resolve stato-lavoro-os conflict"
    git push origin main
  6. Avisás Michel: "tuve un conflict en X, lo resolví así". El verifica próximo pull.
Solo regla absoluta: NUNCA 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 · workflow separado

Wedding-Templates es otro repo, NO parte de sharkcode/. Reglas similares pero scope distinto.

Branch default = 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

Workflow practice Day 2-7 cliente fittizio

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)

Workflow Day 30+ cliente real Wedding

Cuando Michel te asigna cliente real Wedding (post-onboarding pair-mode):

CLIENT DATA HANDLING: para cliente real Wedding, regla critica de IBAN/CF/phone verbatim aplicada (incident 2026-05-02 lección). Vedi WEDDING-TEMPLATES-GUIDE-NOELIA · CLIENT DATA HANDLING.

Etsy listings · NO Git involvement

Etsy listings reales viven en Etsy seller dashboard (web), NO en Git. Cero conflict possible.

Tu workflow Etsy real Day 14+:

  1. Design Canva → export PNG/PDF localmente
  2. Upload Etsy seller dashboard (browser, etsy.com/your/shops/manage) → listing live
  3. Backup local: guardás Canva exports + copy descrizioni in clients/noelia-etsy/listings/etsy-NNN.md + canva-exports/etsy-NNN.png
  4. Commit backup al repo sharkcode (audit trail + recovery if Etsy elimina listing):
    git 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
Etsy = browser only, Git = backup only. Cero rischio overlap con Michel porque tu carpeta clients/noelia-etsy/* es exclusivamente tuya. Michel no la toca nunca.

FAQ comunes

Q · Y si me olvido de hacer pull antes de push?

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.

Q · Y si Michel hizo commit con un bug y rompió algo?

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.

Q · Puedo borrar branches viejos en sharkcode?

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.

Q · Y si quiero hacer un experiment crazy sin riesgo de romper algo?

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.

Q · Y si tengo dudas en general?

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.

Note Michel (italiano): este doc è la "rules of engagement" Git per Atelier Noelia. Day 1-30 = Scenario B (mismo main, archivi diversi) sufficiente. Day 30+ se Atelier Noelia scala con multi-cliente Wedding paralleli = transition Scenario A (branch dedicati cliente). Memory rule: se Noelia in autonomo merge conflict resolution non-trivial, lei chiede a Claude OR sospende + Michel review. Ownership map è hard-rule per evitare Scenario C confuso. Memory file `memory-shared/` write SOLO via PowerShell Michel-side weekly = zero conflict possible (1-way sync).