90959da830
CI / test (pull_request) Successful in 18s
CI / review (anthropic--claude-4.6-sonnet, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 32s
CI / review (gpt-5, security, ., rodin/security-patterns, SECURITY_REVIEW.md, SECURITY_REVIEW_TOKEN) (pull_request) Successful in 57s
CI / review (gpt-5, gpt, GPT_REVIEW_TOKEN) (pull_request) Successful in 2m40s
Add vcs/util.go containing two utility functions that were specified in issue #78 but omitted from PR #83: - GetAllFilesInPath: recursively fetches all file contents under a path using the vcs.FileReader interface. Returns map[string]string of path -> content. - BuildLineToPositionMap: parses a unified diff and returns per-file mapping of new-file line numbers to GitHub diff-position convention. Position is 1-indexed from @@ hunk headers. Deletion lines are not mapped (no new-file line number). Position counter continues across hunks within the same file but resets for each new file. Unit tests cover: - GetAllFilesInPath: empty dir, flat dir, nested dirs, mixed, errors - BuildLineToPositionMap: single hunk, multi-hunk, deletions not mapped, multiple files, empty diff, no-newline marker, single-line hunk, deleted file