SIGN IN SIGN UP

Merge pull request #894: preserve graphs across repository root spellings

Resolves the collision with #890, which landed while this was in review.
Both branches added a guard named `_assert_graph_matches_root` with the
parameters in opposite order, so the later definition silently shadowed the
earlier one and the surviving call sites disagreed (47 failures, 3 mypy
errors). Keeping #894's, at the `incremental_update` choke point, subsumes
the watch-only version from #890 because `watch()` reconciles through it.

`watch()` now normalizes with `_canonical_repo_root` rather than
`os.path.abspath`, which also fixes the CLI and `serve --auto-watch` halves
of #892: a repository reached through a symlinked path is watched and
indexed instead of being refused.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
T
Tirth Kanani committed
d5810d233391bdc4d4f2bd58143205dfea1e5f13