Why
The Core watcher test deterministically receives an add event for .git/HEAD on macOS while asserting a change event. Linux CI passes, but the platform-specific FSEvents classification leaves the full local Core suite red and makes watcher regressions harder to distinguish from backend event vocabulary differences.
What to build
Define and enforce the watcher contract for an existing Git HEAD update across supported watcher backends. Normalize backend-specific event classification at the owning boundary when necessary, while preserving meaningful create, change, and delete semantics for consumers.
Reproduction evidence
- Run
bun test test/filesystem/watcher.test.ts from packages/core on macOS.
Watcher > publishes .git/HEAD events expects change but receives add.
- The failure reproduced in the full Core suite and an isolated rerun.
- The failing test predates
graphagent-v1.0.36 and is outside the 1.0.37-dev.1 release diff.
Acceptance criteria
Blocked by
None - can start immediately.
Why
The Core watcher test deterministically receives an
addevent for.git/HEADon macOS while asserting achangeevent. Linux CI passes, but the platform-specific FSEvents classification leaves the full local Core suite red and makes watcher regressions harder to distinguish from backend event vocabulary differences.What to build
Define and enforce the watcher contract for an existing Git HEAD update across supported watcher backends. Normalize backend-specific event classification at the owning boundary when necessary, while preserving meaningful create, change, and delete semantics for consumers.
Reproduction evidence
bun test test/filesystem/watcher.test.tsfrompackages/coreon macOS.Watcher > publishes .git/HEAD eventsexpectschangebut receivesadd.graphagent-v1.0.36and is outside the1.0.37-dev.1release diff.Acceptance criteria
.git/HEADupdate contract is explicitly documented by the test.Blocked by
None - can start immediately.