| name | sod-ship |
| description | Start-of-day git sync — commit, push, pull all 5 projects, update submodules, then claude-sync. |
| disable-model-invocation | true |
Synchronize all managed repositories at the start of the day.
Pipeline (Sequential)
- Commit dirty trees: For each repo with uncommitted changes, create domain-split commits
- Push unpushed: Push any local commits not yet on remote
- Pull remote: Pull latest changes from remote for all repos
- Submodule update: Update git submodules.
praxis (tracks main) and thaki-ui (tracks develop) are pulled to the LATEST upstream commit and their gitlink bumps committed; the others stay pinned to their recorded SHA:
for sm in praxis thaki-ui; do
git -C ~/thaki/ai-platform-strategy submodule update --init --remote "$sm" 2>&1 | tail -3
if ! git -C ~/thaki/ai-platform-strategy diff --quiet -- "$sm"; then
git -C ~/thaki/ai-platform-strategy add "$sm"
git -C ~/thaki/ai-platform-strategy commit -m "chore: bump $sm submodule to latest" 2>&1 | tail -2
fi
done
git -C ~/thaki/ai-platform-strategy submodule update --init ai-suite ai-platform-webui thaki-cloud-assistant 2>&1 | tail -3
- Claude Sync: Run claude-sync to propagate .claude/ assets (rules, commands, skills, hooks) across all repos. (cursor-sync는 SOD/EOD에서 제외 — 사용자 지시 2026-06-26; 필요 시
/cursor-sync 수동 실행)
- Environment Parity Heal: After pull, restore machine-EXTERNAL state that git doesn't carry (broken symlinks, missing source repos, absent/mismatched
.venv). This is what makes a freshly-pulled repo actually work on the second machine.
bash scripts/env_bootstrap.sh --heal 2>&1 | tail -20
Report the heal summary in the SOD output. A warn (e.g. webwright with no
source_repo, or a missing global CLI) does NOT fail SOD — surface it as an
action item. venv rebuild is skipped when already healthy, so this is cheap on
the day-to-day machine and only does real work right after a fresh clone.
Managed Repositories
Verified 2026-06-11: all repos track main (not dev); research is its own dir;
macro-factor-dashboards may be absent locally; ai-model-event-stock-analytics
is on the hyojunguy account (push may need that auth — skip gracefully).
| Repo | Branch | Path | Origin |
|---|
| ai-platform-strategy | main | ~/thaki/ai-platform-strategy | sylvanus4/ai-strategy |
| realtime-translator | main | ~/thaki/realtime-translator | sylvanus4/realtime-translator |
| github-to-notion-sync | main | ~/thaki/github-to-notion-sync | sylvanus4/github-to-notion-sync |
| ai-template | main | ~/thaki/ai-template | sylvanus4/cursor-template (renamed) |
| research | main | ~/thaki/research | sylvanus4/research |
| ai-model-event-stock-analytics | main | ~/thaki/ai-model-event-stock-analytics | hyojunguy/… (diff account) |
| macro-factor-dashboards | main | ~/thaki/macro-factor-dashboards | sylvanus4/… (may be absent) |
Do NOT hardcode the branch — read each repo's actual upstream
(git -C <dir> rev-parse --abbrev-ref --symbolic-full-name @{u}) before push/pull.
Run commit-preflight-guard and fleet-divergence-doctor before mutating any repo.
Rules
- Read the actual current branch + upstream per repo; never assume
dev/main
- Skip repos that are missing or fail gracefully — report errors but continue
outputs/, state/ are runtime data (cron-managed) — do not force-commit in a loop
- Always post a SOD progress summary to Slack
#효정-할일 at the end (eod-ship Phase 6 parity); best-effort via slack_post_message.py, never blocks completion