{"version":"2.1.277","anchor":"attribute-aware-snapshot-staging-now-detects-and-reports-wri","canonical_anchor":"attribute-aware-snapshot-staging-now-detects-and-reports-wri","heading":"Git snapshot pass gains race detection, pacing, and richer refusal reasons","tier":"internal","area":"Git Internals","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.277\/e\/attribute-aware-snapshot-staging-now-detects-and-reports-wri","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.277","markdown":"### Git snapshot pass gains race detection, pacing, and richer refusal reasons\n\nThe git working-tree snapshot process now detects late-arriving edits, paces itself, and explains refusals in more detail\n\n**What**\n\n- The snapshot builder now takes a `passStartedAtMs`\/`notOlderThanNs` threshold, and a new `sincePassStart` flag on changed entries lets it produce a distinct error message when a file was edited right as the snapshot began, instead of mid-read.\n\n- It also gains `stageHooks`, `budgetMs`, and `lastDescribed` parameters for controlling and describing the pass.\n\n- `--ignore-submodules=dirty` is now added to the diff-tree comparison, and previously-verified entries are re-applied via `update-index` for unstable paths.\n\n- Refusal results now carry a structured `cause`, such as `{ kind: \"rules_unreadable\" }`, `{ kind: \"staged_protected\", count }`, `{ kind: \"credential_named\", count }`, or `{ kind: \"committed_protected\", count }`.\n\n- Snapshot output now also reports a `withheld.unspellable` category alongside the existing withheld categories.\n\n**Why**\n\nThis makes it easier to tell what happened during a git snapshot: whether a file changed too close to when the snapshot started to be captured reliably, and exactly why any files were withheld or refused, rather than getting a generic failure.\n\n- Area: Git Internals\n- Tier: Under the hood\n- Useful: 2\/5\n- Signal: 2\/5"}