Workspace-hub sync root-churn catch-up
Use this when ./scripts/repository_sync status all shows subrepos are clean but the workspace-hub root keeps becoming dirty again during the same session.
When this applies
repository_sync status allreports repos clean/up to date- but root
git statusstill shows new.planning/quick/*,scripts/review/results/*, plan docs, audit outputs, or.Codex/state/* - and there are active long-running review/agent processes such as
codex execorgemini exec
Key insight
This is not necessarily a repo-sync failure. It is often a root-only churn problem caused by still-running processes writing new artifacts after each commit.
Procedure
- Run both checks separately:
- root:
git -C /mnt/local-analysis/workspace-hub status --short --branch - repos:
./scripts/repository_sync status all
- root:
- Inspect live processes before declaring success:
ps -ef | grep -E '[c]odex exec|[g]emini exec|[c]laude'
- If subrepos are clean but root has new files, stage and commit the root changes:
git add -Agit commit -m "chore(sync): ..."git push origin main
- Immediately re-run root
git statusagain. - If new files appeared again, repeat the catch-up loop.
- Only claim full root cleanliness if
git statusremains clean across a short recheck window.
Important distinctions
repository_sync status allverifies managed repos; it does not guarantee the workspace-hub root will stay clean.- A clean repo-sync result plus a dirty root means: repo sync succeeded, but root artifact churn still needs one or more catch-up commits.
- If a repo itself is still dirty, handle that repo directly before treating the situation as root-only churn.
Common churn sources
.planning/quick/*.out.planning/quick/*status-comment.mdscripts/review/results/*- plan markdown files under
docs/plans/ - generated audit outputs
.Codex/state/*
Reporting guidance
Report these separately:
- repo-sync status across managed repos
- workspace-hub root cleanliness status
- whether active processes are still mutating files
This avoids falsely claiming that everything is fully clean when only the subrepos are clean.