Files
kandev/docs/plans/git-subprocess-admission/task-02-interactive-git-fanout.md
T
2026-08-24 11:09:03 +00:00

3.3 KiB

id, title, status, wave, plan, spec, depends_on
id title status wave plan spec depends_on
02-interactive-git-fanout Interactive Git fan-out done 2 plan.md ../../specs/platform/requirements/git-subprocess-admission.md
01-class-aware-admission

Task 02: Interactive Git Fan-Out

Acceptance

  • Status, log, and diff share one capacity-derived worker policy.
  • Multiple simultaneous handler requests never exceed the process-wide Git cap.
  • All user-request agentctl Git commands declare interactive, with no classless or hardcoded secondary concurrency path.
  • Existing per-repository order, response schemas, and partial results remain unchanged.

Verification

# Direct Go commands are required because the backend Makefile has no focused or
# race-test targets.
cd apps/backend && go test ./internal/agentctl/server/api ./internal/agentctl/server/process -run 'Test(FanOutRepos|Git.*Admission|MultiRepo.*Class)' -count=1
cd apps/backend && go test -race ./internal/agentctl/server/api ./internal/agentctl/server/process -run 'Test(FanOutRepos|Git.*Admission|MultiRepo.*Class)' -count=1

Files Likely Touched

  • apps/backend/internal/agentctl/server/api/git.go
  • apps/backend/internal/agentctl/server/api/git_fanout_test.go
  • apps/backend/internal/agentctl/server/process/git.go
  • apps/backend/internal/agentctl/server/process/git_pr_providers.go
  • apps/backend/internal/agentctl/server/process/workspace_files.go
  • apps/backend/internal/agentctl/server/process/workspace_git_cmd.go
  • apps/backend/internal/agentctl/server/process/workspace_git_commits.go
  • apps/backend/internal/agentctl/server/process/workspace_git_diff.go
  • Focused sibling tests for migrated operators

Dependencies

Task 01 (01-class-aware-admission).

Parallelism

Parallel-safe with Tasks 03 and 05 after Task 01. This task owns agentctl Git API and non-poller process files; Task 03 owns backend lifecycle packages and Task 05 owns control/debug files.

Inputs

  • Spec sections: explicit work classes and consistent multi-repository behavior.
  • Plan section: Interactive operations and repository fan-out.
  • Existing indexed fan-out behavior in api/git.go and typed admission API from Task 01.

Output Contract

Report red tests, classification audit, fan-out worker rule, preserved response semantics, files changed, exact command outcomes, race-test evidence, residual risks, and synchronized task/plan status.

Results

  • RED: TestFanOutReposRespectsLimit failed after deriving its expected bound from the configured capacity; the old fixed fan-out admitted five workers with capacity three.
  • GREEN: status, log, and cumulative-diff fan-out now derive their worker limit from subproc.GitCapacity() while preserving indexed result order.
  • User-triggered Git operator, PR-provider, workspace file, and content-at-ref operations use GitInteractive; tracker-owned background paths were completed by Task 04 with GitBackground admission and post-admission timeouts.
  • cd apps/backend && go test ./internal/agentctl/server/api ./internal/agentctl/server/process -run 'Test(FanOutRepos|Git.*Admission|MultiRepo.*Class)' -count=1 — 3 passed.
  • cd apps/backend && go test -race ./internal/agentctl/server/api ./internal/agentctl/server/process -run 'Test(FanOutRepos|Git.*Admission|MultiRepo.*Class)' -count=1 — 3 passed.