From 03ee83e8a59fef409b9315a59626d410b3d78b59 Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Mon, 2 Nov 2026 03:32:46 +0000 Subject: [PATCH] Separate validation commands from tree checks --- docs/roadmap/implementation.md | 2 +- internal/validation/validation.go | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index dd204c7..195e1fb 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -50,7 +50,7 @@ the agent policy; an intermediate compilation dependency is recorded accurately. | 12 | A08 | Complete — redirect boundary, origin authorization, cycle, and delivery outcome tests passed. | | 13 | A09 | Complete — bounded reads, size and digest mismatches, stream failures, cancellation, reconciliation, and public prebuilt delivery checks passed. | | 14 | A10 | Complete — bounded and full capture, forwarding, error identity, concurrency, and benchmark modes passed. | -| 15 | A13 | Pending | +| 15 | A13 | Complete — validation ordering, scope, tree lifecycle, diagnostics, and public callback checks passed. | | 16 | A15 | Pending | | 17 | Remaining A19, A20 | Pending | | 18 | A11, A17: assessment only | Pending | diff --git a/internal/validation/validation.go b/internal/validation/validation.go index 65790fb..beb0d62 100644 --- a/internal/validation/validation.go +++ b/internal/validation/validation.go @@ -71,7 +71,7 @@ func (request Request) ReadCandidateTree(ctx context.Context) (*CandidateTree, e } // Run executes shared validation for the captured candidate. -func Run(ctx context.Context, request Request) (result error) { +func Run(ctx context.Context, request Request) error { if request.Settings.FileSize != nil && request.Settings.FileSize.LimitBytes != nil && *request.Settings.FileSize.LimitBytes < 0 { return &Failure{ Check: FileSize, @@ -89,6 +89,13 @@ func Run(ctx context.Context, request Request) (result error) { } } } + if err := runGoChecks(ctx, request); err != nil { + return err + } + return runTreeChecks(ctx, request) +} + +func runGoChecks(ctx context.Context, request Request) error { goDirectory := request.ModuleDir if goDirectory == "" { goDirectory = request.RepositoryDir @@ -134,6 +141,10 @@ func Run(ctx context.Context, request Request) (result error) { } } } + return nil +} + +func runTreeChecks(ctx context.Context, request Request) (result error) { needsSharedSelection := len(request.Settings.SharedFiles) != 0 if request.Settings.GoFormat || request.Settings.ModuleDistribution.WorkspaceFiles || request.Settings.ModuleDistribution.LocalReplacements || request.Settings.FileSize != nil || request.Settings.Markdown != nil || needsSharedSelection || len(request.Settings.ForbiddenFiles) != 0 { tree, err := request.ReadCandidateTree(ctx)