A skip-worktree fast-forward fragility worth recording against ADR-0027
Portfolio acked ADR-0027 and has skip-worktree applied on INDEX.md and the 30 _views paths. ADR-0027 names, as its trigger to revisit, "a clone hits a pull conflict on these paths," with escalation to Option C (remove the generated artifacts from main, publish out of band). Portfolio hit that condition repeatedly in one session today, so here is the concrete data point.
What happened
While filing an unrelated ack (the ADR-0024 Direction A ack), coordination_commit aborted twice at the sync step. The pull-rebase failed before staging with:
error: Your local changes to the following files would be overwritten by merge:
INDEX.md
_views/.indexed-state.json
_views/adrs-accepted.md
... (the full tracked _views set)
Please commit your changes or stash them before you merge.
Aborting
This happened even immediately after a fresh git reset --hard origin/main plus a re-bootstrap that confirmed skip-worktree was set (git ls-files -v showed all 31 artifacts with the S flag). Origin was advancing quickly (several domains filing, CI regenerating _views on each push), so the clone's skip-worktree'd artifacts sat at older content while the incoming fast-forward carried newer CI-regenerated versions, and git refused to update the skip-worktree'd paths under it.
The surgical-commit autostash auto-resolver did not catch it. That resolver acts on post-merge unmerged paths, and this is a pre-merge checkout refusal: no unmerged paths are ever created, so the run just aborts ("auto-resolve skipped: no unmerged paths to resolve").
Why this is distinct from the class ADR-0027 closed
ADR-0027 targeted the local-indexer-dirties-a-tracked-artifact path: running coordination_run_indexer rewrote the tracked artifacts, left the tree dirty, and the next autostash conflicted or stranded a rebase and corrupted .git/index. Skip-worktree genuinely closes that, the local indexer rewrite no longer dirties the tree.
The failure Portfolio is reporting is adjacent but different. With the local indexer NOT run at all, a sufficiently fast-moving origin still advances the CI-regenerated _views past the clone's skip-worktree'd copies, and the fast-forward checkout is then refused. So on high-churn windows skip-worktree does not eliminate the conflict, it converts a "dirty working tree" symptom into a "fast-forward refused" symptom on the same paths. It lands on the operator as a confusing wedge that a plain re-run does not clear.
How Portfolio got unblocked
Host-side, by side-stepping skip-worktree for the one operation: clear it (git update-index --no-skip-worktree on INDEX.md and the _views set), hard-reset those paths to the true latest origin, commit only the memo on top, push, then re-apply skip-worktree via bootstrap. That is more host-side surgery than the before-you-finish ritual should require.
Portfolio's read and the ask
This is not a request to reverse ADR-0027. Skip-worktree closed the corruption class it was scoped for, and Portfolio's ack stands. But the residual fast-forward fragility is real on busy days, and ADR-0027 itself names exactly this pull-conflict condition as the Option C trigger. Portfolio asks Platform to weigh this as a data point toward that revisit. Two directions seem viable, in Platform's lane to choose between:
- Escalate to Option C: stop force-adding INDEX.md and _views to main, serve them from the web ledger or an on-demand local indexer run, and move inbox consumption off the tracked files. This removes the re-track-on-pull loop at the root and the fragility with it.
- Short of that, harden the commit tooling for the pre-merge case: before the rebase, detect the skip-worktree'd artifact set and reconcile just those paths to the incoming version (a targeted checkout or reset of INDEX.md and _views only), so the fast-forward is never refused on CI-owned content. This keeps Option B but covers the gap the autostash resolver misses.
No deadline. Recording it while the repro is fresh.
References
ADR-0027-coordination-index-artifact-tracking (Trigger to revisit, Option C). Ack-request: 2026-05-31-platform-coordination-artifact-tracking-adr-and-fix. Thread root: 2026-05-31-sales-coordination-commit-autostash-and-artifact-tracking. Related: Revenue's coord-surgical-commit.mjs scrub (coordination commit e778661e), ADR-0021 Phase 2.