5.3 KiB
5.3 KiB
id, title, status, wave, depends_on, plan, spec
| id | title | status | wave | depends_on | plan | spec |
|---|---|---|---|---|---|---|
| 01-descriptor-bound-git-init | Descriptor-bound Git initialization | completed | 1 | plan.md | ../../specs/workspaces/requirements/create-local-repository.md |
Task 01: Descriptor-Bound Git Initialization
Acceptance
- Linux and macOS initialize the exact verified directory inherited as fd 3; replacing its pathname cannot redirect Git into the replacement.
- Successful initialization still creates only
.git, uses unborn branchmain, and preserves the service's identity check, exclusive publication, rollback, and error reporting. - Windows retains its existing pathname-compatible behavior. Other Unix/BSD compatibility builds remain outside the supported product scope until they provide the same ownership and exclusive-publication guarantees.
Verification
make -C apps/backend test
make -C apps/backend lint
make -C apps/backend build
# Direct Go commands are approved exceptions: the backend Makefile has no target
# for package/test filters, the race detector, or CGO-free Darwin test binaries.
cd apps/backend && go test ./internal/task/gitinit ./internal/task/service \
./internal/task/handlers -run 'GitInit|InitializeLocalRepository' -count=1
cd apps/backend && go test -race ./internal/task/gitinit ./internal/task/service \
-run 'GitInit|InitializeLocalRepository' -count=1
cd apps/backend && tmpdir=$(mktemp -d) && \
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go test -c \
-o "$tmpdir/local-repository-service.test" ./internal/task/service && \
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build \
-o "$tmpdir/kandev" ./cmd/kandev
Files Likely Touched
apps/backend/internal/task/gitinit/*.goapps/backend/internal/task/gitinit/*_test.goapps/backend/internal/task/service/local_repository_initialization.goapps/backend/internal/task/service/local_repository_initialization_test.goapps/backend/internal/task/handlers/repository_handlers_test.godocs/specs/workspaces/requirements/create-local-repository.mddocs/plans/fix-local-repository-darwin-init/plan.mddocs/plans/fix-local-repository-darwin-init/task-01-descriptor-bound-git-init.md
Dependencies
None.
Parallelism
Sequential. The helper and service changes share one subprocess contract and one regression test.
Inputs
- Spec: exact-directory identity requirement, staging replacement failure mode, and regression scenario.
- Go package initialization, used only by a marked helper subprocess before application/test entry.
- Existing
ExtraFilesand identity checks inapps/backend/internal/task/service/local_repository_initialization.go. - Explicit local repository trust boundary in
docs/decisions/2026-07-20-explicit-local-repository-trust.md.
Output Contract
Report the red test evidence, helper boundary, files changed, exact command results, residual cleanup risk, commit and push receipt, and updated task/plan status.
Verification Results
- RED:
go test ./internal/task/gitinit -run TestCommandContextRejectsMissingGit -count=1 -vfailed before parent-side Git resolution because command construction incorrectly succeeded. - RED (CI remediation): the handler integration test timed out because the helper recursively launched a test binary that had no package-specific helper dispatch; reproduced locally with a 15-second timeout.
- GREEN: focused helper/service/handler/CLI coverage passed, 35 tests in 4 packages, after moving the marked subprocess trampoline into the private package.
- Race-focused helper/service/handler coverage passed, 30 tests in 3 packages.
- The CI-shaped full race-and-coverage run completed every actual test package successfully,
including handlers in 12.884 seconds. Its local command exit remained non-zero only because this
environment's Go installation lacks
go tool covdatafor packages with no tests. - Darwin arm64 cross-compilation passed for service and handler test binaries and
cmd/kandev. make -C apps/backend testpassed across the full backend.make -C apps/backend buildpassed for the unified binary and bundled helper binaries.make -C apps/backend lintpassed with 0 issues after CI remediation.- Full affected packages passed, 776 tests in 3 packages.
- Race-focused helper and service coverage passed, 22 tests in 2 packages.
- Darwin arm64 cross-compilation passed for the service test binary and
cmd/kandev. make -C apps/backend lintpassed with 0 issues.
Delivery Record
- Helper boundary: Linux/macOS inherit the verified directory as fd 3; a subprocess carrying the
private argument and environment marker calls
fchdir(3)and execs Git before normal entry. - Changed files:
internal/task/gitinit, local-repository service/tests, handler integration coverage, the feature spec, and this plan/task record. - Residual cleanup risk: if another process renames the request-owned inode, its new pathname may be unknowable; Kandev still leaves the replacement untouched and persists no repository row.
- Initial delivery: commit
46258170913b49ad40749ea4538134b6e4c393cfwas pushed tonova28:fix/local-repo-init-darwinwith active pre-commit and commit-message hooks and no bypass. - Status: task and plan completed; CI follow-up replaces package-specific dispatch after the handler integration test exposed recursive test-binary startup.