Multi-repo run scanner - #93
Conversation
1bd1ddc to
b653d1a
Compare
|
Claude encountered an error —— View job I'll analyze this and get back to you. |
b653d1a to
20056ab
Compare
|
Claude encountered an error —— View job I'll analyze this and get back to you. |
20056ab to
3849bb7
Compare
|
Claude encountered an error —— View job I'll analyze this and get back to you. |
3849bb7 to
874af96
Compare
|
Claude encountered an error —— View job I'll analyze this and get back to you. |
LookPath check for claude CLI ran before the mocked CommandContext, causing all intent tests to fail in CI where claude is not installed. Extract LookPath into an overridable var (same pattern as CommandContext). Add .githooks/pre-push that runs `make test` so test failures are caught before push. Update pre-commit to also run gofumpt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Claude finished @shahar-caura's task in 3m 45s —— View job PR Review: Multi-repo run scanner
SummaryThis PR adds a There is one significant correctness issue (global state race) and a few medium/low issues to address before merge. 1. Race condition: scanner's
|
FORGE-16
Closes #61
Effort: S
Problem
Forge only knows about runs in the current repo's
.forge/runs/directory. Users working across multiple repos have no unified view of all their forge activity. The dashboard needs a way to discover and aggregate runs from every repo on disk.Solution
Add a
scannerpackage ininternal/scanner/that discovers.forge/runs/directories across configured repo paths. It accepts a list of root directories (e.g.,~/code) and recursively finds repos containing.forge/runs/. Returns a unified list ofRunStateobjects tagged with their source repo path and repo name.File Manifest
internal/scanner/scanner.gointernal/scanner/scanner_test.goKey Changes
ScanRepos(roots []string) ([]RepoRuns, error)— walks directories, finds.forge/runs/*.yamlfilesRepoRunsstruct:RepoPath string,RepoName string,Runs []state.RunState.forge), respects symlinks, handles permission errors gracefullystate.Load()to deserialize each run YAMLInterface Changes
New public API:
Acceptance Criteria
.forge/runs/in nested repo directories.forge/runs/directories gracefullymake testpassesVerify
go test ./internal/scanner/... -vAnti-Goals
forge serveContext for Agent
Read
internal/state/state.gofor theRunStatestruct andLoad()function. The scanner is a pure discovery layer — it reads state files and returns them, nothing more.